我正在学习 javascript,我使用 jquery 框架进行一些学习...请有人向我解释如何使用此示例来提醒 byebye 而不是 hello
更好的问题是如何在函数更改中更改 var msg
var msg = 'hello';
function change() {
msg = 'byebye';
}
alert(msg);
我正在学习 javascript,我使用 jquery 框架进行一些学习...请有人向我解释如何使用此示例来提醒 byebye 而不是 hello
更好的问题是如何在函数更改中更改 var msg
var msg = 'hello';
function change() {
msg = 'byebye';
}
alert(msg);
好吧,如果change()
在 之前被调用alert()
,它会做你所期望的。
试试这个:
var msg = 'hello';
function change() {
msg = 'byebye';
}
change();
alert(msg);
你可以这样做:
var msg = 'hello';
function change() {
msg = 'byebye';
return msg;
}
alert(change());
var msg = 'hello';
function change() {
msg = 'byebye';
}
change();
alert(msg);
您应该首先调用更改功能。
这msg
是在窗口对象的范围内..
你也没有调用这个change()
函数
所以它正确打印"hello"
在警报之前调用该函数,您将看到您的预期..
change();
alert(msg);
从某种意义上说,你做对了。你首先设置的是一个全局变量
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);
})();
用于change()
调用函数:
change();
这会改变变量的值。现在您可以提醒新值:
alert( msg ); // "byebye"