【发布时间】:2019-02-19 02:25:30
【问题描述】:
Mozilla 的开发人员资源显示了关于函数范围的两个相互矛盾的解释。
Here 表示即使“变量定义在与函数调用相同的范围内”,代码也会抛出错误,因为“它没有在函数定义内定义”。
示例)
function myBigFunction() {
var myValue;
subFunction1();
}
function subFunction1() {
console.log(myValue);
} //this will show a reference error
但是,here 表示“在另一个函数中定义的函数也可以访问其父函数中定义的所有变量以及父函数可以访问的任何其他变量”。
示例)
function getScore() {
var num1 = 2,
num2 = 3;
function add() {
return name + ' scored ' + (num1 + num2);
}
return add();
} //this is ok
【问题讨论】:
-
两者并不矛盾,实际上是互补的。变量范围就像这个函数
-
两个例子的变量都是在父函数中声明的
-
在第一个例子中没有父函数。父函数是封装函数的函数。在第一个示例中,定义了两个单独的函数。
-
subFunction1();只是在父函数内部调用,在父函数外部定义。定义的函数签名是functionsubFunction1() {... -
那么可以说函数定义的声明位置很重要吗?
标签: javascript function variables scope