我试图理解为什么内部函数可以在直接调用外部函数时访问外部函数的公共属性,而不是在将其赋值给变量时?
例:
function outer(x,y){
this.x = x;
this.y = y;
function inner(){
alert(this.x);
}
inner();
}
outer(1,2); //As expected, alerts 1
var func = outer(1,2) //Also alert 1
var func2 = new outer(1,2); //Alerts undefined
Run Code Online (Sandbox Code Playgroud)
我试过的一件事是删除this关键字alert(this.x);,它确实适用于所有三种情况.但是,如果我删除this关键字,我将访问传入的参数,而不是公共变量,这绝对不是所需的操作.有人可以解释这种行为吗?
Poi*_*nty 19
当你这样调用时outer(1, 2),this是一个引用window,所以"x"和"y"实际上是全局变量.这就是为什么inner()可以访问"x".
当你打电话时,new outer(1, 2)你已经this(在"外部")引用了一个新对象.当"内部"被称为"外部"时,this仍将引用window,因此没有"x".
this为每个函数调用确定值,该值仅取决于该调用的详细信息.因此,你调用"外部"通过这一事实new对内部调用"内部"没有影响 - 因为你只是将函数调用为inner();,this函数内部的值将是一个引用window(嗯,全局上下文,无论如何)是).
以下是this调用函数时可以设置的方法:
new运算符调用该函数,this则将引用新创建的对象.foo.someFunction())的属性查找获得对函数的引用,那么this将是对该对象的引用..call()或.apply()在功能原型,然后this将指的第一个参数取其这些功能被用于,如果需要强制转换的对象的值.this则将引用全局上下文(window在浏览器中).编辑 -森那维达斯在严格模式上面评论指出,这种情况下会导致this被null(这真让人有点更有意义,而且会避免在OP观察到的古怪).| 归档时间: |
|
| 查看次数: |
3528 次 |
| 最近记录: |