我正在学习javascript,我使用jquery框架进行一些学习...... 请有人向我解释如何使用此示例提醒byebye而不是hello
更好的问题是如何在函数更改中更改var msg
var msg = 'hello';
function change() {
msg = 'byebye';
}
alert(msg);
答案 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"