博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 中的var : 隐含变量 全局变量 变量提升
阅读量:4345 次
发布时间:2019-06-07

本文共 1552 字,大约阅读时间需要 5 分钟。

  Javascript 总是在不知不觉中就出人意料地创建全局变量,其原因在于javascript 的两个特性。

  第一个特性是javascript 可直接使用变量,甚至无需声明;

  第二个特性是javascript 有个暗示全局变量的概念,即任何变量,如果未经声明,就为全局对象所有。

1 function foo(x,y){2     var a = b =0;  3 }

  上面的 var a = b =0; 就相当于 var a = (b = 0);//从右至左的操作符优先级 。这里的b 就是一个隐式全局变量。

  写成 var a, b; 

            a = b =0;

  隐式全局变量 与 明确定义的全局变量有细微的不同,不同之处在于能否使用 delete 操作符撤销变量。

  - 使用 var 创建的全局变量(这类变量子啊函数外部创建)不能删除。

  - 不使用 var 创建的隐含全局变量(尽管它是在函数内部创建)可以删除。

  这表明隐含全局变量严格来讲不是真正的变量,而是全局对象的属性,属性可以通过 delete 操作符删除,但变量不可以。

  以下为验证代码:

1 var global_var = 1; 2 global_novar = 2; 3 (function(){ 4     global_fromfunc = 3; 5 }); 6  7 //企图删除 8 delete global_var;//false 9 delete global_novar;//true10 delete global_fromfunc;//true11 12 typeof global_var;//"number"13 typeof global_novar;//"undefined"14 typeof global_fromfunc;//"undefined"

  单一var 模式:

  只使用一个var 在函数顶部进行变量声明是一种非常有用的模式。它的好处在于:

  - 提供一个单一的地址以查找到函数需要的的所有局部变量;

  - 防止出现变量在定义前就被使用的逻辑错误;

  - 帮助牢记要声明变量,以尽可能少地使用全局变量;

  - 更少的编码。

  单一 var 模式如下所示:

function func(){    var a = 1,          b = 2,          sum = a + b,          myobject = {},          i,          j;    //函数体}

  注意变量之间以逗号间隔

  js 中变量声明提升:

  先看例子:

  

1 myname = "Nick";2 3 function func(){4     alert(myname);//未定义5     var myname = "Devil";6     alert(myname);//"局部变量"  7 }8 9 func();

  第 4 行,乍一看是alert 全局变量 myname ,事实并非如此!javascript 允许在函数的任意地方声明多个变量,无论在哪里声明,效果都等同于子啊函数顶部进行声明。这就是所谓的“提升”。上面代码等同于:

myname = "Nick";function func(){    var myname;//声明提前    alert(myname);//未定义    myname = "Devil";    alert(myname);//"局部变量"  }func();

 

转载于:https://www.cnblogs.com/chuyu/p/3188970.html

你可能感兴趣的文章
MongoDB入门二
查看>>
XXE漏洞
查看>>
《java练习题》习题集一
查看>>
Xml中SelectSingleNode方法中的xpath用法[转]
查看>>
昨夜寒雪
查看>>
[转]Windows Shell 编程 第十三章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988004】...
查看>>
缓存之数据库缓存依赖
查看>>
在iOS项目中,这样才能完美的修改项目名称
查看>>
jupyter && ipython notebook简介
查看>>
ECMAScript 6 入门——ES6 声明变量的六种方法
查看>>
冲刺第九天
查看>>
关于mysql的sql语句符号问题
查看>>
python网络爬虫--BeautifulSoup提取猫眼TOP100电影
查看>>
JS组件系列——显示隐藏密码切换的jQuery插件
查看>>
android学习日记05--Activity间的跳转Intent实现
查看>>
前端pdf 大全
查看>>
数据结构——POJ 1686 Lazy Math Instructor 栈的应用
查看>>
Android作业
查看>>
Spring Boot 中使用 @Transactional 注解配置事务管理
查看>>
[Unity热更新]02.依赖关系
查看>>