javascript - func.call(null, param) 与 func(param) 有区别吗?

查看:103
本文介绍了javascript - func.call(null, param) 与 func(param) 有区别吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

func.call(null, param) 与 func(param) 有区别吗?见到很多地方使用call的方式,不知道是为什么,直接调用不是更简单吗?

var func = function (param) {
    console.log(1);
}

func.call(null, 'hello world');
func('hello world');

希望答案会详细全面一点,把涉及的可能性都说一下。

解决方案

有!
在严格模式下,第一种,this 是 null ,第二种是undefined
非严格模式下,都是window

call 的作用是指定 this,而js里的this都是对象。所以使用call指定this,其实是第一个参数 toObject,所以可以写另一种 toObject.(当然,使用Object更好):

function toObjet(v)
{
    // assert v !== undefined && v !== null
    function fn() { return this;}
    return fn.call(v);
}

对于第一个参数是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...),前一种thisobj 后一种是null或是window,详见上面我的博客。

这篇关于javascript - func.call(null, param) 与 func(param) 有区别吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆