为什么以下工作:
function sum(a,b) { return a + b; }
var result = sum.call(null,3,4); // 7
为什么定义结果?我正在调用 sum 作为 null 的方法。但是 null 不是对象,不能有属性!
到底是怎么回事?
为什么以下工作:
function sum(a,b) { return a + b; }
var result = sum.call(null,3,4); // 7
为什么定义结果?我正在调用 sum 作为 null 的方法。但是 null 不是对象,不能有属性!
到底是怎么回事?
for 的第一个参数Function.prototype.call
是context,它定义了this
被调用函数的执行上下文的值,仅此而已。
所以基本上,你说的this
是指null
(至少在 ES5 严格模式下),但由于你this
无论如何都不能访问,所以没有区别。
在非严格模式下,this
cannot be null
,所以它被替换为全局对象。
当你使用.call
or.apply
和null
or时,如果不是在严格模式下undefined
,默认this
(通常)会自动使用。window
来自MDN(重点是我的):
thisArg
this
为调用提供 的值fun
。请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,null
将undefined
被替换为全局对象,原始值将被装箱。
如果您处于严格模式,它实际上将是null
or undefined
。
(function() {
'use strict';
return this;
}).call(null); // null
(function() {
'use strict';
return this;
})(); // undefined
它不是。在这种情况下,NULL 指定this
关键字绑定到的对象。在您的方法中,通过将其设置为 NULL ,它要么没有this
变量绑定,要么绑定到函数本身或窗口。
由于您没有使用通过 访问this
的任何变量或函数,因此无需使用 call 方法......您可以使用sum(3,4)
例如,如MDN中所述,第一个参数是
为调用 [方法] 提供的 this 的值。请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,null 和 undefined 将被替换为全局对象,原始值将被装箱。
正如 MDN 解释的那样。
这个Arg
这为有趣的呼吁提供了价值。请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,null 和 undefined 将被替换为全局对象,原始值将被装箱。
简单地说就是一小段代码。
<script >
'use strict'
function fun() {
alert(this);
}
fun.call(null);
</script>
在严格模式下,这是空的。但在非严格模式下。这是窗口或全局对象。