Javascript fn.apply,第一个参数为null或未定义
我对这件事感到困惑。比如说, 考虑一下这个片段Javascript fn.apply,第一个参数为null或未定义,javascript,Javascript,我对这件事感到困惑。比如说, 考虑一下这个片段 Array.min = function(){ return Math.min.apply( Math, arr ); } 我能理解。我理解fn.apply为 使用给定的此值和作为数组提供的参数调用函数 但下面的代码片段也可以使用 Array.min = function(){ return Math.min.apply( null, arr ); } Array.min = function(){ return Mat
Array.min = function(){
return Math.min.apply( Math, arr );
}
我能理解。我理解fn.apply为
使用给定的此值和作为数组提供的参数调用函数
但下面的代码片段也可以使用
Array.min = function(){
return Math.min.apply( null, arr );
}
Array.min = function(){
return Math.min.apply( undefined, arr );
}
MDN解释为
如果方法是非严格模式代码中的函数,则null和
未定义的将替换为全局对象和基本体
值将被装箱
我不太明白我所说的大胆的部分。那句话是什么意思?有人能详细说明一下吗?全局对象就是全局对象。只是:
唯一的全局对象是在控件进入任何执行上下文之前创建的
除了本规范中定义的属性外,全局对象还可能具有其他主机定义的属性。这可能包括其值为全局对象本身的属性;例如,在HTML文档对象模型中,全局对象的窗口
属性就是全局对象本身
在浏览器中,您实际上是在调用Math.min.apply(window,arr)
,您可以验证:
(function() {
console.log(this); // Logs `Window {...}`
}).apply(undefined);
这是非严格模式的许多问题之一此
有时会变成窗口
,您最终会以创建全局属性而告终。在严格模式下,此
将真正是未定义的
:
(function() {
'use strict';
(function() {
console.log(this); // Logs `undefined`
}).apply(undefined);
})();
“原语值将被装箱”只是说像数字和字符串这样的原语将被“装箱”到容器对象中,因为原语本身不是对象。同样,您可以验证这一点:
(function() {
console.log(this); // Logs `Number {}`, not `2`
}).apply(2);
这里有一些关于原语的更多信息:如果该方法是非严格模式代码中的函数,null和undefined将替换为全局对象 i、 e.窗口,如果是浏览器,我不确定它在nodejs中指的是什么 和基本值将被装箱
原语值将被包装到其相应的对象中,即在
fn的情况下。应用(2,args)
变量此内fn
将引用值为2的数字对象 nodejs也是全局对象窗口
。@vdua:Node.js使用全局
。