if ("a" in window) {
var a = 1;
console.log(a)
}
console.log(a);
function a() {
console.log(this);
}
a.call(null);
我不明白为什么会报这个错误,求指教
if ("a" in window) {
var a = 1;
console.log(a)
}
console.log(a);
function a() {
console.log(this);
}
a.call(null);
我不明白为什么会报这个错误,求指教
// 解析完以后会是这样
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);
8 回答4.9k 阅读✓ 已解决
6 回答3.6k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.5k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
js在执行过程中,函数声明会提升到顶部,所以当你执行
if
语句后,a
被替换成了值为1
的数字类型变量,并不是一个函数类型。可以阅读下有关变量提升先关文章,比如:https://juejin.im/post/59905b...