2012-03-16 116 views
0

我認爲javascript中的函數的一個要點是提供範圍。在函數中定義的東西只能在函數內部使用。javascript中的函數範圍

function cat(name) { 
    talk = function() { 
     alert(" say meeow!") 
    } 
} 

talk() 

我期待上面的代碼翻倒,因爲談話不應該是可見的。但是,爲什麼?

+0

變量默認就像我在前面的問題中所解釋的那樣,當你不聲明它們的時候,它是全球範圍的。 http://stackoverflow.com/questions/9745069/not-a-function – Guffa 2012-03-16 22:46:31

回答

4

這是因爲你沒有聲明它與var關鍵字。

如果您不使用var關鍵字,它將在全局範圍內。如果你使用var,這將是在功能範圍:

function cat(name) { 
    //anonymous function assigned to the local variable talk 
    var talk = function() { 
    alert(" say meeow!") 
    }; 
} 

你可以聲明命名功能,而var關鍵字,他們仍然會在局部範圍內:

function cat(name) { 
    //local talk function 
    function talk() { 
    alert(" say meeow!") 
    }; 
} 
2

您尚未在任何範圍內實際定義變量。所以它默認爲全局範圍。

function cat(name) { 
    var talk = function() { // <-- added var 
     alert(" say meeow!") 
    } 
} 

talk() // fail 

JavaScript允許您在不定義變量的情況下使用變量,這使得編程語言更易學,更靈活。我不推薦你使用這個特性。總是定義你的變量。

2

在函數內部,你必須聲明變量爲「var」或者它們是全局聲明的。所以你會這樣做:

function cat(name) { 
    var talk = function() { 
     alert(" say meeow!") 
    } 
} 

talk() // error: undefined