lov*_*esh 6 javascript this anonymous-function
我有这样的代码:
function demo() {
this.val=5;
function() {
this.val=7;
}();
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在firefox或chrome控制台中执行此代码时,它会出现语法错误.我不明白为什么这是一个错误,因为我已经读过javascript函数是对象所以当我调用匿名函数时,里面this指向函数demo并且应该更改为valto 7,所以如果我这样做
var x=new demo();
x.val; //should give 7
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
function demo() {
this.val=5;
var f=function() {
this.val=7;
}();
}
window.val; // gives 7
Run Code Online (Sandbox Code Playgroud)
我不明白函数是否是对象然后this匿名函数指向window和不指向的原因demo.请解释一下.
Fel*_*ing 16
我不明白为什么这是一个错误
因为
function() {
this.val=7;
}();
Run Code Online (Sandbox Code Playgroud)
被评估为函数声明,函数声明需要一个名称.要将其解释为函数表达式,您需要将其放在括号中:
(function() {
this.val=7;
}());
Run Code Online (Sandbox Code Playgroud)
(使其成为一项直接的功能)
或将函数分配给变量:
var f = function() {....};
f();
Run Code Online (Sandbox Code Playgroud)
你在第二个片段中做的是两者的混合,虽然有效,但没有多大意义.f会有价值undefined.
我不明白,如果函数是对象,那么为什么匿名函数中的这个指向
window而不是demo.
功能不继承他们被称为上下文.每个函数都有它自己的this,什么this是指由下式确定如何调用该函数.它基本归结为:
"Standalone"(func())或立即函数((function(){...}())):this将引用全局对象(window在浏览器中)
作为object(obj.func())的属性:this将引用obj
使用new [docs] keyword(new Func()):this引用从中继承的空对象Func.prototype
apply [docs]和call [docs]方法(func.apply(someObj)):this指someObj
进一步阅读: