0

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

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

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

6 回答 6

1

好吧,如果change()在 之前被调用alert(),它会做你所期望的。

试试这个:

var msg = 'hello';

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

change();
alert(msg);​
于 2012-11-02T17:09:42.667 回答
1

你可以这样做:

var msg = 'hello';

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

alert(change());​
于 2012-11-02T17:11:06.800 回答
0
var msg = 'hello';
function change() {
msg = 'byebye';
}
change();
alert(msg);​

您应该首先调用更改功能。

于 2012-11-02T17:09:58.257 回答
0

msg是在窗口对象的范围内..

你也没有调用这个change()函数

所以它正确打印"hello"

在警报之前调用该函数,您将看到您的预期..

change();
alert(msg);​

检查小提琴

于 2012-11-02T17:10:26.477 回答
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);
})();
于 2012-11-02T17:11:01.700 回答
0

用于change()调用函数:

change();

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

alert( msg ); // "byebye"
于 2012-11-02T17:11:13.643 回答