Javascript声明变量的,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。

varnum=1;

是在当前域中声明变量。如果在方法中声明,则为局部变量(localvariable),如果是在全局域中声明,则为全局变量。

num=1;

事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析num,如果在任何当前作用域链中找到num,则会执行对num属性赋值,如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。

注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。
  即便如此,可能你还是很难明白"变量声明"跟"创建对象属性"在这里的区别。事实上,Javascript的变量声明、创建属性以及每个Javascript中的每个属性都有一定的标志说明它们的属性----如只读(ReadOnly)不可枚举(DontEnum)不可删除(DontDelete)等等。

由于变量声明自带不可删除属性,比较varnum=1跟num=1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。

varnum=1;

是在当前域中声明变量。如果在方法中声明,则为局部变量(localvariable),如果是在全局域中声明,则为全局变量。

num=1;

事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析num,如果在任何当前作用域链中找到num,则会执行对num属性赋值,如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。

注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。

即便如此,可能你还是很难明白"变量声明"跟"创建对象属性"在这里的区别。事实上,Javascript的变量声明、创建属性以及每个Javascript中的每个属性都有一定的标志说明它们的属性----如只读(ReadOnly)不可枚举(DontEnum)不可删除(DontDelete)等等。

由于变量声明自带不可删除属性,比较varnum=1跟num=1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

//num1为全局变量,num2为window的一个属性

varnum1=1;

num2=2;

//deletenum1;无法删除

//deletenum2;删除

functionmodel(){

varnum1=1;//本地变量

num2=2;//window的属性

//匿名函数

(function(){

varnum=1;//本地变量

num1=2;//继承作用域(闭包)

num3=3;//window的属性

}())

}

最后:在ECMAScript5标准中,有一种"严格模式"(StrictMode)。在严格模式中,为未声明的标识符赋值将会抛引用错误,因此可以防止意外的全局变量属性的创造。目前一些浏览器的新版本已经支持。

JavaScript中用var和不用var的区别相关推荐

  1. 在Javascript中 声明时用var与不用var的区别,== 和 ===的区别

    今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...

  2. Javascript 声明时用“var”跟不用var的区别

    Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...

  3. Javascript全局变量var与不var的区别深入解析

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍了Javascript全局变量var与不var的区别.需要的朋友可以过来参考下,希望对大家有所帮助 相信你对全 ...

  4. JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)

    JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...

  5. java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别

    前言 Javascript中的变量定义方式有以下三种方式: 1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...

  6. JavaScript中的 let 和 var

    文章目录 let 和 var let 的诞生 let与var区别 全局作用域 函数作用域 块作用域 let 和var 重新声明 const let 应用场景 let 和 var let 的诞生 在ES ...

  7. var和let、const区别

    let和var都可以定义变量,而const定义的是常量 const a=123//无法更改值a = 1234 // 这时会报错,因为const定义的是常量 不可更改console.log(a) con ...

  8. /var/tmp和/tmp目录区别

    Linux临时目录/tmp与/var/tmp区别 /tmp与/var/tmp,这两个目录被用户用于存储临时性的文件,亦经常被程序存储临时性数据. 两个目录没有本质上的区别,最根本的区别仅仅是系统对其中 ...

  9. javascript number转string不用科学计数法_[JavaScript]之数据类型篇

    JavaScript共有7种数据类型:number,string,boolean,symbol,undefined,null,object 1. number 整数和浮点数 JavaScript 内部 ...

最新文章

  1. Unity Game Starter Kit for Windows Store and Windows Phone Store games
  2. Socket网络编程--小小网盘程序(5)
  3. asp.net调试方法
  4. vue.js能美化界面吗_vue将单页面改造成多页面应用的方法
  5. oracle控制文件
  6. Controller计算值传到jsp页面,用session传值
  7. si4438 与 si4432通讯
  8. Redis 备份,容灾及高可用实战
  9. C++:数字字符的出现次数
  10. Microsoft Visual C++ 2005 SP1无法安装
  11. L1正则化与嵌入式特征选择(稀疏性)
  12. SSD固态硬盘重装win10系统 无法分区,gpt格式
  13. wincc 服务器授权型号,WINCC 授权详解
  14. C语言OJ1116,9度OJ 题目1116:加减乘除
  15. 适合iPhone13的蓝牙耳机音质比较好有哪些?音质好的蓝牙耳机推荐
  16. 3款在线网页原型图设计软件推荐
  17. Apache2.4 下载和安装 - Win10
  18. 电脑和电脑之间到底是如何通信的
  19. JVM - 工欲善其事必先利其器之虚拟机工具(下)
  20. HDU 3698-Let the light guide us(线段树+DP)愿圣光忽悠你

热门文章

  1. 动感英语笔记_小红书奇葩笔记大赏
  2. 转载 : JSP取得绝对路径
  3. ShaderLab学习小结(四)简单产生阴影
  4. 转载:JS数组reduce()和reduceRight()方法
  5. 阅读verilog程序总结
  6. PHP年龄计算 取得两个时间戳相差的年龄年月日显示
  7. testTry-catch和catch中的应用程序恢复
  8. FreeBSD6.2详细安装图解
  9. 分布式计算的程序设计,请各位帮忙看看有没有意见
  10. 线上CPU100%?看看这篇是怎么排查的!