2014-10-29 37 views
-3
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,但我心想創建具有相同名稱的一個新的局部變量會精細。爲什麼不是這樣的JavaScript /角碼工作

+0

爲什麼downvotes?這是一個合理的問題 – Steve 2014-10-29 23:39:45

+0

當描述你的代碼時,確保你避免以任何形式使用短語「它不起作用」。相反,*描述究竟發生了什麼* – Sacho 2014-10-29 23:39:52

+0

是有道理的,但我認爲var foo是一個新的範圍,外面什麼也看不到它,所以這就是爲什麼我感到困惑。 – gallly 2014-10-29 23:40:54

回答

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()被調用創建的範圍),將陰影函數foo從外部示波器(http://en.wikipedia.org/wiki/Variable_shadowing