我有一个简单的函数可以更改传递给它的变量。但退出函数后,变量返回旧值。我不知道为什么或如何解决它
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
var a='test';
$().doit(a);
alert(a);
});
(function ($) {
$.fn.doit = function (input) {
alert(input);
input='new';
alert(input);
};
}(jQuery));
</script>
</head>
<body>
</body>
</html>
答案 0 :(得分:4)
这是设计的,当变量退出内部作用域(你的doit函数)时,值会回到之前的值,因为在JS中变量总是按值传递。
如果您想保留该值,则必须从函数中返回值:
<script>
$(document).ready(function() {
var a='test';
a = $().doit(a);
alert(a);
});
(function ($) {
$.fn.doit = function (input) {
alert(input);
input='new';
alert(input);
return input;
};
}(jQuery));
</script>
您可以在此处看到它:http://jsfiddle.net/nQSNy/
答案 1 :(得分:1)
这是因为您按值而不是通过引用传递变量a
。但是,您可以从函数中返回一个值并使用它。