在函数中使用变量

时间:2012-11-02 17:08:23

标签: javascript jquery

我正在学习javascript,我使用jquery框架进行一些学习...... 请有人向我解释如何使用此示例提醒byebye而不是hello

更好的问题是如何在函数更改中更改var msg

var msg = 'hello';
function change() {
msg = 'byebye';
}
alert(msg);​

6 个答案:

答案 0 :(得分:1)

好吧,如果在change()之前调用了alert(),那么它就可以达到预期效果。

试试这个例子:

var msg = 'hello';

function change() {
  msg = 'byebye';
}

change();
alert(msg);​

答案 1 :(得分:1)

你可以这样做:

var msg = 'hello';

function change() {
    msg = 'byebye';
    return msg;
}

alert(change());​

答案 2 :(得分:0)

var msg = 'hello';
function change() {
msg = 'byebye';
}
change();
alert(msg);​

您应该先调用更改功能。

答案 3 :(得分:0)

这里msg在窗口对象的范围内。

您还没有调用change()函数

所以它正确打印"hello"

在提醒之前调用该功能,您将看到您的预期......

change();
alert(msg);​

<强> Check Fiddle

答案 4 :(得分:0)

从某种意义上说,你做得对。您首先设置的是全局变量

var msg = 'hello';

然后你定义了一个范围为该变量的函数

function change(){
 msg = 'byebye';
}

然后你测试了:

alert(msg);

但是,你从未做过的就是打电话给你的功能。定义函数时,需要调用它来运行代码,如下所示:

change();
alert(msg);

一些功能提示

使用闭包

如果您想查看针对这种情况的最佳做法,我建议不要使用全局命名空间。你可以用所谓的闭包来做到这一点。它基本上围绕代码包装函数的本地范围。此范围内的子函数共享范围。

(function(){
 var msg = 'hello';
 function change(){
  msg = 'byebye';
 }
 change();
 alert(msg);
})();//Wrapping the function in () and then using () on it will cause it to run the code without being called

这不仅会使全局命名空间独立,它将允许分配给闭包内部变量的内存 - 我们包装代码的函数 - 被收集得更快,因为一旦闭包的代码是超出范围的完成了执行。

请注意,在闭包中声明function change时,它将无法在全局范围内访问。如果您希望它在全球范围内可用,那么以这种方式实现它就没那么有意义了。

允许函数通过参数

传递给它的更改

函数的()区域内部是可以传入参数的地方。在javascript中,它们的类型是动态的。使用function change(newMessage)意味着您可以在函数内部使用newMessage变量。它是隐式的本地范围。通过传递新消息change('byebye');,这将允许各种不同的消息:

(function(){
 var msg = 'hello';
 function change(newMessage){
  msg = newMessage;
 }
 change('byebye');
 alert(msg);
})();

答案 5 :(得分:0)

使用change()调用该函数:

change();

这会更改变量的值。现在您可以提醒新值:

alert( msg ); // "byebye"