Jquery插件函数参数用法



我坚持这个东西,增量不起作用,一直返回0

var oft = 0;
$.fn.load = function(oft){
       oft = oft+2;
}
$('#check').click(function(){
    $(this).load(oft);
    alert(oft);
});

直到我像这样改变参数名,

var oft = 0;
$.fn.load = function(offset){ /*name changed*/
       oft = offset+2;
}
$('#check').click(function(){
    $(this).load(oft);
    alert(oft);
});

只是好奇,为什么呢?

就是这一行。

$.fn.load = function(oft){ /*name changed*/

在javascript中,参数变量具有局部作用域。即使您在函数内部更改了它,外部世界也不会看到它。

所以当你调用load函数使用下面的点击回调函数,它总是得到这个值var oft = 0;

$('#check').click(function(){
    $(this).load(oft);
    console.log(oft);
});

但是当您将参数名称更改为offset时,该offset获得局部作用域,而变量oft在load函数中具有全局作用域。由于的变量具有全局作用域,因此您可以看到click回调函数中的增量。

这是因为局部和全局变量作用域。

在函数外部定义oft,因此它具有全局作用域。然后,通过将其作为参数传入来定义oft的本地版本。

Javascript则使用具有相同名称的本地版本。它对局部变量进行了操作,然后当函数结束时,这个变量就消失了。它们有相同的名称,但它们不是同一个变量。

你可以在这里阅读更多:为什么局部变量杀死我的全局变量?

最新更新