我认为javascript中的一个功能点是提供范围。函数中定义的东西只能在函数内部使用。
function cat(name) {
talk = function() {
alert(" say meeow!" )
}
}
talk()
我希望上面的代码可以解决,因为谈话不应该是可见的。但它是,为什么?
答案 0 :(得分: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!" )
};
}
答案 1 :(得分:2)
您实际上没有在任何范围内定义变量。所以它默认为全局范围。
function cat(name) {
var talk = function() { // <-- added var
alert(" say meeow!" )
}
}
talk() // fail
JavaScript允许您在不定义变量的情况下使用变量,这使编程语言更容易学习,更灵活。我建议您不要使用此功能。始终定义变量。
答案 2 :(得分:2)
在函数内部,您必须使用“var”声明变量,或者它们是全局声明的。所以你会这样做:
function cat(name) {
var talk = function() {
alert(" say meeow!" )
}
}
talk() // error: undefined