我認爲javascript中的函數的一個要點是提供範圍。在函數中定義的東西只能在函數內部使用。javascript中的函數範圍
function cat(name) {
talk = function() {
alert(" say meeow!")
}
}
talk()
我期待上面的代碼翻倒,因爲談話不應該是可見的。但是,爲什麼?
我認爲javascript中的函數的一個要點是提供範圍。在函數中定義的東西只能在函數內部使用。javascript中的函數範圍
function cat(name) {
talk = function() {
alert(" say meeow!")
}
}
talk()
我期待上面的代碼翻倒,因爲談話不應該是可見的。但是,爲什麼?
這是因爲你沒有聲明它與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!")
};
}
您尚未在任何範圍內實際定義變量。所以它默認爲全局範圍。
function cat(name) {
var talk = function() { // <-- added var
alert(" say meeow!")
}
}
talk() // fail
JavaScript允許您在不定義變量的情況下使用變量,這使得編程語言更易學,更靈活。我不推薦你使用這個特性。總是定義你的變量。
在函數內部,你必須聲明變量爲「var」或者它們是全局聲明的。所以你會這樣做:
function cat(name) {
var talk = function() {
alert(" say meeow!")
}
}
talk() // error: undefined
變量默認就像我在前面的問題中所解釋的那樣,當你不聲明它們的時候,它是全球範圍的。 http://stackoverflow.com/questions/9745069/not-a-function – Guffa 2012-03-16 22:46:31