JavaScript变量的作用域&是否有var 的区别
来源:互联网 发布:pe远程控制软件 编辑:程序博客网 时间:2024/04/29 14:28
“JavaScript对变量作用域的规定是:
- 变量在全局声明,或者在代码的任何位置隐士声明(不用var),则该变量在全局可见
- 变量在函数内显示申明(使用var),则在该函数内可见”
今天在修改一个前台bug的时候,遇到一个问题。我想通过sbflag控制实现不会点击id为EditBtnOk的按钮后多次进入到function ()进行Submit操作。则希望在执行完一次后就将sbflag置为false。但是事实是虽然在执行 sbflag = flag时,sbflag为false,但是第二次进入到function后,sbflag又会变为true。
代码如下:
var sbflag = true;//该标志位位需要关注的变量 $('#EditBtnOk').click(function () { 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}
以前看《深入理解JavaScript》的时候没有对这个概念进行深入理解,这次就不会忘了。希望大家以后也注意一下这个陷阱。想要更系统看一下js作用域可以看以下链接
js作用域与作用域链详解
1 0
- JavaScript变量的作用域&是否有var 的区别
- js变量作用域var的区别
- javascript定义变量时,有var和没有var的区别
- JavaScript中变量声明有var和没var的区别
- JavaScript中变量声明有var和没var的区别示例介绍
- javascript变量声明有误var的区别
- JavaScript作用域和var的关系
- 函数中参数是否有var的区别
- javascript中的var定义的变量和没有var定义变量的区别
- javascript中var的作用
- js变量前有 var 与没有的区别
- js变量前有 var 与没有的区别
- js变量前有 var 与没有的区别
- js变量前有 var 与没有的区别
- javascript var声明变量与不声明的区别
- javascript中定义变量var,const,let简单的区别
- JavaScript中let和var定义变量的区别
- 【JavaScript】let与var的区别及变量、函数提升
- Android面试之J2SE基础
- 类集框架Set
- fullpage框架的使用
- ps抠图换背景详细步骤讲解
- 连接数据库的相关配置参数属性说明详解
- JavaScript变量的作用域&是否有var 的区别
- 解读编码后的HEAP_ENTRY结构
- Java IO流 Zip文件的压缩和好压缩
- swiper的使用(一)
- ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory
- 【一天一道LeetCode】#119. Pascal's Triangle II
- asp.net LinkButton 控件
- android studio安装
- 对比软件Beyond Compare 使用