2015-09-02 55 views
0

我坚持了这件事情,增量不工作,回头率0jQuery插件功能参数的用法

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); 
}); 

只是好奇,为什么?清楚的解释将非常赞赏,Thankyou

回答

0

这是做的伎俩行。

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

在JavaScript中,参数变量具有局部范围。即使你在功能内部改变它,外界也不会看到它。

所以,当您使用以下点击回调函数调用负载功能,它总是得到这个值VAR经常= 0;

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

但是当你改变参数名抵消那么这偏移获取本地范围和可变经常具有负载函数内部全局范围。由于变量oft具有全局作用域,因此您可以在点击回调函数中看到增量。

0

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

您可以在函数的外部定义oft,以便它具有全局范围。然后,通过将它作为参数传入来定义一个本地版本的常量。

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

你可以在这里阅读更多:Why does local variable kill my global variable?