js声明变量使用var声明与不使用var声明比较
2014-09-11 12:48
309 查看
今天项目上遇到了这个问题,一个jsp页面二次进入后, 对KendoTree 的数据源的操作在本页面无效,在后台打印出来却发现数据已经改变,改了好久,最后发现了是使用了var声明,而且多个页面的变量名一样(代码是复制过来的……) 。
网上找的一个解释
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。
JS中变量申明分显式申明和隐式申明。
Var i=100 显示申明
i=100 隐式申明
在函数中使用var关键字进行显式申明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。
当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。
var num = 1是在当前域中声明变量. 如果在方法中声明,则为局部变量;如果是在全局域中声明,则为全局变量。而num = 1,事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析 num; 如果在任何当前作用域链中找到num,则会执行对num属性赋值; 如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。
注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。
写在这给自己做个提醒了。
网上找的一个解释
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。
JS中变量申明分显式申明和隐式申明。
Var i=100 显示申明
i=100 隐式申明
在函数中使用var关键字进行显式申明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。
当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。
var num = 1是在当前域中声明变量. 如果在方法中声明,则为局部变量;如果是在全局域中声明,则为全局变量。而num = 1,事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析 num; 如果在任何当前作用域链中找到num,则会执行对num属性赋值; 如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。
注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。
写在这给自己做个提醒了。
相关文章推荐
- js声明变量使用var声明与不使用var声明比较
- js 变量声明 (var使用与不使用的区别)
- js 变量声明 (var使用与不使用的区别)
- js 变量声明 (var使用与不使用的区别)
- js变量的声明、类型、以及使用
- JS中VAR的用处(局部变量要用var来声明,全局变量不加var)
- js中我定义一个var变量,在页面想显示出来,用什么东西显示比较好,var比较长还有空格
- js中所有的变量声明var当被悬置到函数的顶部
- 【前端乱弹第3期】Java 10将会使用var关键字进行变量声明,你怎么看?
- [js点滴]使用var定义变量和不使用var的本质区别
- JS中用var声明变量和不用的区别
- js 函数定义,使用,作用域,变量声明提升,遇解析.....
- 声明变量时是否使用var的不同
- JS中的变量声明——var,let,const的区别
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- H5基础知识第八课时(JS使用方式与变量的声明)
- 使用var和不使用声明变量的区别
- javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨
- js中 声明变量时: var $i 和 var i 有什么区别吗 各自是什么意思
- js的链式作用域和var变量声明