js变量作用域var的区别

“JavaScript对变量作用域的规定是:
- 变量在全局声明,或者在代码的任何位置隐士声明(不用var),则该变量在全局可见
- 变量在函数内显示申明(使用var),则在该函数内可见”
今天在修改一个前台bug的时候,遇到一个问题。我想通过sbflag控制实现不会点击id为EditBtnOk的按钮后多次进入到function ()进行Submit操作。则希望在执行完一次后就将sbflag置为false。但是事实是虽然在执行 sbflag = flag时,sbflag为false,但是第二次进入到function后,sbflag又会变为true。
代码如下:
var sbflag=true;//该标志位需要关注的变量
(‘#EditBtnOk’).click(functiono(){  
         if(sbflag==true)
.ajax({
url: ‘../Submit’,
type: ‘post’,
traditional: true,
data: {
App_id: Appid,
Details: Details
//Bank_To: Bank_To,
//Bank: Bank,
//Account:Account
},
beforeSend: function () {
//Ajax完成前(控制器处理过程中),显示进度条
},
success: function (data) {
//关闭进度条
var serverData = data.split(‘;’);
if (serverData[0] == “ok”) {
//在前端修改数据
}
} else if (serverData[0] == “no”) {
//显示错误信息
}
}
})
sbflag = flag;
}
})

我查阅了下面链接所讲的js作用域后,有所感悟。发现了js是以函数作用域的,而不是如常见的语言如C语言一样是块级作用域。可以用两个例子来说明
example1:
var name=”global”;
if(true){
var name=”local”;
console.log(name)
}
console.log(name);

输出均为local这可以表明不是块级作用域,否则全局变量不会被覆盖掉。
在很多javascript编程人员的印象中,定义变量用var和不用没有区别,但实际是存在差异的:
如果使用var定义变量,那么程序会强制定义一个新变量(及时变量名相同)。
如果没有使用var定义变量,系统会有优先在当前上下文中搜索是否存在该变量。只有在该变量不存在的前提下,系统才会重新定义一个新变量。
example2
var flag=true;
if(flag){
function t(){
flag=false;
}
t();
console.log(flag); //结果为false
}
var flag1=true;
if(flag1){
function t(){
var flag1=false;
}
t();
console.log(flag1); //结果为true
}

注意有一种特殊情况,就是如果函数的参数名和全局变量相同的话,在函数内部不写var,里面的变量会认为是形参的调用,而不会覆盖全局变量:
var flag=true;
function t(flag){
flag=false;
}
t();
console.log(flag); //结果为true
}

本文转载于http://blog.csdn.net/Yy921117/article/details/51823714

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值