为什么函数外部的变量声明无法识别

时间:2013-12-29 14:13:52

标签: javascript scope

<html>
<head>
<script>

function myFunction(){
   alert(input);

}

window.onload = function(){
var input = "hello";
    myFunction();
}
</script>
</head>
<body>

</body>
</html>

这是我的代码,为什么它不会提醒hello

4 个答案:

答案 0 :(得分:0)

问题是input中的myFunction是指全局变量,但input中的onload是局部变量。

尝试将输入作为参数传递给myFunction

function myFunction(input){
   alert(input);
}

window.onload = function(){
    var input = "hello";
    myFunction(input);
}

或者将input声明为全局变量,并从事件处理程序中删除var

var input;

function myFunction(){
   alert();
}

window.onload = function(){
    input = "hello";
    myFunction();
}

请注意,在这些函数之外声明input是不必要的(严格模式除外),但这通常是一种很好的做法。

答案 1 :(得分:0)

在您的情况下,

输入不是全局变量,您无法通过其他函数访问它,其范围限定为绑定到onload事件的匿名函数。

如果你想要访问它,就像它是一个设置,你必须在任何函数之外声明它,或者你必须声明它没有var OR你必须用window.input声明它。在任何情况下,我都不会建议您使用上述任何功能,除非该变量实际上应该在您的所有应用程序中共享。

答案 2 :(得分:0)

输入范围仅限于window.load函数()

如果要从多个函数访问输入,请将其作为全局变量。

<script>
var input = "";

function myFunction(){
   alert(input);

}

window.onload = function(){
    input = "hello";
    myFunction();
}
</script>

或将输入作为参数传递给函数

<script>

function myFunction(var input){
   alert(input);

}

window.onload = function(){
var input = "hello";
    myFunction(input);
}
</script>

答案 3 :(得分:0)

使其“工作”的一种方法尚未提及,同时具有onload方法的变量和函数部分:

window.onload = function(){
    var input = "hello";
    function myFunction(){
        alert(input);
    }

    myFunction();
}

Live test case