func.call(null, param) 与 func(param) 有区别吗?见到很多地方使用call的方式,不知道是为什么,直接调用不是更简单吗?
var func = function (param) {
console.log(1);
}
func.call(null, 'hello world');
func('hello world');
希望答案会详细全面一点,把涉及的可能性都说一下。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
有!
在严格模式下,第一种,this 是
null,第二种是undefined。非严格模式下,都是
window。call的作用是指定this,而js里的this都是对象。所以使用call指定this,其实是第一个参数 toObject,所以可以写另一种 toObject.(当然,使用Object更好):对于第一个参数是
undefined或是null的情况下,在非严格模式下,函数中的this 会被解析为 window,否则,还是原来的undefined或是null,详见我的博客:http://zonxin.github.io/post/2015/11/javascript-this
至于为什么一般写成
fn.call更多的表示这是一个函数?但是这两种形式从阅读上似乎没有太大的区别,从浏览器的错误提示上也没有更大的区别。但是如果
fn是某个对象的方法,就有区别了。如,obj.fn(args...),obj.fn(null,args...),前一种this是obj后一种是null或是window,详见上面我的博客。在你的代码示例里,它们没有区别,为什么?
但如果稍加调整,譬如:
搜一下js函数的四种调用方式吧