说不完的JavaScript的作用域
来源:互联网 发布:linux 内核下载 编辑:程序博客网 时间:2024/06/15 08:14
昨天在作某厂的笔试题,答的一塌糊涂,感觉很熟悉,却又说不出正确答案,还是因为平时真正深刻理解的东西太少,关于js的作用域问题是个永远都说不完的话题,昨天就遇到了。题目大概如下:
var user = { name: "jack", getname: function(){ return this.name; }};var obj = user.getname;console.log(obj()); console.log(user.getname());
问题是:输出结果是什么?
a. jack, jack;b. jack, undefined;c. undefined, jack;d. undefined, undefined;e. '', '';f. '', jack;
相信大多数人在看js的作用域和作用域链这部分的时候都见过这个题,所以我就不假思索的选了d. undefined, undefined
,事后自己敲了代码才知道大错特错。正确答案为:'', jack
。我怎么都想不到的~~
所以今天就认真的分析了一下,为什么会是这个结果呢?
(1)输出''
的原因:
首先在对象user声明结束后,定义了obj变量,并初始化,var obj = user.getname;
这个过程相当于将getname()这个函数的指针赋给了obj变量,此时obj就相当于:
var obj = function(){ return this.name;};
此时this指向window对象,然后window有个name属性,然而window.name并没有赋值,此时就为''
。
(2)输出jack的原因:
这个比较好理解,因为user对象直接调用自己的方法,此时的this自然就是user本身,user自身有name属性,所以就输出了jack。
好多时候不是问题太难,而是我们从来不往深了想,得过且过就会屡屡在同一个地方摔跟头,写这篇就是想让自己长记性。
0 0
- javascript的作用域
- javascript的作用域
- javascript的作用域
- javascript的作用域
- javaScript的作用域
- JavaScript的作用域
- javascript的作用域
- JavaScript的作用域
- JavaScript的作用域
- Javascript 的作用域
- javascript的作用域。
- 说不完的JavaScript的作用域
- javascript变量的作用域
- Javascript作用域的问题
- JavaScript的变量作用域
- JavaScript的词法作用域
- javascript变量的作用域
- 浅谈javascript的作用域
- java反射使用实例
- jQuery初步
- jQuery选择器
- jQuery操作dom
- jQuery操作dom事件
- 说不完的JavaScript的作用域
- jQuery动画与特效
- jQuery操作Ajax
- jQuery插件
- jQuery对象和dom对象
- dict和set的使用
- jQuery实现点击式选项卡
- eclipse中在框架开发时编写xml等配置文件的时候,引号中的包、路径等文件不提示的解决方法
- jQuery实现导航栏