在以下代码中:
//global scope
function isValid() {
return "hello from isValid";
}
function test() {
//local scope
var isValid = 9;
//.....
isValid();
}
test();
我收到错误:
"TypeError: isValid is not a function
at test (devicok.js:10:5)
at devicok.js:12:1
at https://static.jsbin.com/js/prod/runner-4.1.1.min.js:1:13850
at https://static.jsbin.com/js/prod/runner-4.1.1.min.js:1:10792"
为什么这时我理解isValid函数是in a different scope而不是isValid变量?似乎变量覆盖了函数定义。即使它们具有不同的范围,它们共享相同的命名空间的问题是什么?
答案 0 :(得分:3)
JavaScript中没有名称空间 - 函数和变量以及一切都存在于一个名称空间中。是的,外部变量被内部声明遮蔽 - 当你在函数中引用isValid
时,它是局部变量。其值为9
,而不是函数值,因此在调用时会抛出异常。
答案 1 :(得分:0)
您可以执行以下操作;
//global scope
function isValid() {
return "hello from isValid";
}
function test() {
//local scope
var isValid = 9;
//.....
return this.isValid();
}
console.log(test());