javascript中的函数范围

时间:2012-03-16 22:43:57

标签: javascript

我认为javascript中的一个功能点是提供范围。函数中定义的东西只能在函数内部使用。

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

talk()

我希望上面的代码可以解决,因为谈话不应该是可见的。但它是,为什么?

3 个答案:

答案 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