为什么这个javascript / angular代码没有工作

时间:2014-10-29 23:35:54

标签: javascript angularjs

function foo() = { .. do stuff and return value };

$scope.newFunction = function(){
   // Set new local variable foo equal to value of foo()
   var foo = foo();
}

当我更改本地foo变量名称时,它很好,我对Javascript很新,但对我来说,我认为创建一个具有相同名称的新局部变量就可以了。

1 个答案:

答案 0 :(得分:4)

有关变量吊装的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting

你在这里看到的是你的newFunction中变量托管(和阴影)的影响。在提升阶段之后,你可以在逻辑上看起来像这样:

function foo() {} // foo is part of newFunction's outer scope
$scope.newFunction = function(){
   var foo; // === undefined
   foo = foo(); //<-- foo is undefined, yet is used as a function
}

当你在该范围内声明一个名为foo的变量时(调用newFunction()时创建的范围),它将从外部范围(http://en.wikipedia.org/wiki/Variable_shadowing

隐藏函数foo。