关于js里面call()方法

if ("a" in window) {
    var a = 1;
    console.log(a)
}
console.log(a);
function a() {
    console.log(this);
}

a.call(null);

clipboard.png

我不明白为什么会报这个错误,求指教

阅读 1.8k
3 个回答

js在执行过程中,函数声明会提升到顶部,所以当你执行 if 语句后,a 被替换成了值为 1 的数字类型变量,并不是一个函数类型。可以阅读下有关变量提升先关文章,比如:https://juejin.im/post/59905b...

// 解析完以后会是这样

        function a() {
            console.log(this);
        }
        var a;
    
        if ("a" in window) {
            a = 1;
            console.log(a)
        }
        console.log(a);//此时a是1 而不是函数所以报错

        a.call(null);
        
        
        可以看看我的一篇关于变量和函数提升的文章 [https://segmentfault.com/a/1190000017805834][1]

你的a.call() a是基本类型 a = 1,不是object,所以会报错。这里涉及到变量提升。在js中函数是一等公民,上面代码会解析成:

 function a() {
   console.log(this);
}
var a;
if ("a" in window) {
    a = 1;
    console.log(a)
}
console.log(a);
a.call(null); 
推荐问题
宣传栏