锁定老帖子 主题:关于js作用域的疑惑
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-30
var name = "abc" function testGlobal() { alert(name); //2处:undefined var name = "def"; alert(name); //3处:def alert(this.name); //4处:abc this. name = "ghi"; alert(this.name); //5处:ghi } alert(name); //1处:abc testGlobal(); alert(name); //6处:ghi 如上面的代码,在这里发帖,主要是个人觉得这个版块要比问答版块的活跃,function中的this为什么指的是widow对象,还有其他的几处具体是怎么来的,我已经作了标记,那几处的原因? 求大牛解释! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-12-30
额,咋 没 有 人 回 复?
|
|
返回顶楼 | |
发表时间:2011-12-30
"this" is a keyword not a property of any object, that refer to one object depending on the scope. In the global scope, it refers to the window object. In the function scope it refers to the object that has the function as its property 当一个函数不作为其它对象的属性时,默认this引用window
|
|
返回顶楼 | |
发表时间:2011-12-30
额……怎么人这么少?
|
|
返回顶楼 | |
发表时间:2011-12-30
楼主说的有问题吧 2处应该是 abc
|
|
返回顶楼 | |
发表时间:2011-12-31
最后修改:2012-01-04
var name = "abc"; // js会有一个预解析的过程,先执行函数里的变量声明,但不执行赋值 function testGlobal() { // 所以这里查找变量的时候,搜索到函数里的name // 此时有name的声明,就是下面那个,但是并没有执行赋值 // 所以是undefined alert(name); //2处:undefined var name = "def"; // 这里调用这个函数的时候,上面的赋值语句已经执行 // 所以是def alert(name); //3处:def // this - 谁调用指向谁 // js里方法和对象是松散的耦合 // 多数情况下函数可以随意得绑定到别的对象上去运行 alert(this.name); //4处:abc this. name = "ghi"; alert(this.name); //5处:ghi } // 搜索变量找到全局作用域的 name alert(name); //1处:abc // window直接调用这个方法 testGlobal(); // 函数里this. name = "ghi"; 经过上面的函数执行实际是window.name='ghi'; alert(name); //6处:ghi |
|
返回顶楼 | |
发表时间:2011-12-31
// this - 谁调用指向谁
testGlobal() ,完整的写应该是window.testGlobal(); |
|
返回顶楼 | |
发表时间:2011-12-31
最后修改:2011-12-31
waitingmyself 写道 楼主说的有问题吧 2处应该是 abc
然也 啊!不对,弄错了,如果情况如下,2处应该是abc var name = "abc" function testGlobal() { alert(name); //2处:abc name = "def"; } testGlobal(); |
|
返回顶楼 | |
发表时间:2011-12-31
恩,如果函数内变量如果有声明的话那么此变量跟外部变量没什么关系
|
|
返回顶楼 | |
发表时间:2011-12-31
方法内的this就是window,由于在方法外声明了name 实际this.name = 'ghi' 就想到与将方法外的name值修改了
|
|
返回顶楼 | |