从C#和Java背景到达JavaScript,我很惊讶地看到下面的代码片段有效。我从s
函数返回的变量sum
不应存在于此范围内。
以下示例中的JavaScript范围如何工作? s
的范围应该限制在for
循环内部,而不是在其结束的大括号之后。 Java或C#中的等效代码段将声明 s在当前上下文中不存在。
function sum(arr) {
for(var i = 0, s = 0; i < arr.length; s += arr[i++]) {
// scope of s is okay here
}
return s; // but, shouldn't this be a violation of scope?
}
// some test code
var data = [1,2,3,4];
var total = sum(data);
console.log(total);