JS函数中直接使用变量,不用var??

今天见到老师,这样用。问他也没说明白。
虽然不报错,但是感觉很奇怪?
图片描述

阅读 10.2k
15 个回答

这种写法叫隐式全局变量,自动声明添加var 为全局变量,一般情况最好不要采用,如果代码量多的情况下,指不定会给你出现错误,到时候你找都找不到

会导致全局污染?

只能说不加var的变量声明是合法的,并且不加var的变量才是正经的全局变量。

严格模式就不行咧

  1. 因为是局部代码,可能这些变量在外面已经声明(定义) 过,即它们的左右域包含了这个函数

  2. 局部声明,但因为没有加var 关键字作为显式限定,则在一般模式下成为全局变量定义和使用,如果个别变量已经是全局变量了,则直接重新赋值

  3. 在严格模式下会报错,提示变量没有声明。

严格来说是要用var的,但是不用他也不会有错,js就是这么松散的语法。不过好像es6中会报个警告。

新手上路,请多包涵

非严格模式下变量会被添加到全局对象,严格模式下会报ReferenceError

全局污染是肯定的,大项目你这么写,可能导致你写的变量被其他人覆盖哦

给你看个恶心物:

图片描述

图片描述

公司某产品的代码,用了很多年了一直没出问题哦。

注意id和ids,ids并没有声明过,在第二张图片中是第一次出现。

整段代码中,ids这个变量只出现过4次,全部都在图中了。

图片描述

不建议你这么写,不用var 声明的是全局变量,用多了会有问题。

"use strict";//开启严格模式 在严格模式下,未声明的变量不能直接使用,会报错。
在不使用严格模式的情况下是可以使用的,默认是添加到全局。如果前面已经有地方使用过该变量会被覆盖。
建议 最好按规范写,要不然出错的时候排查起来很费力!

具体原理不太懂,但是有个例子,楼主可以理解下:(理解了原理记得在这里总结一下哦)
<script type='text/javascript'>
function test(){
var hello = 'liverpool';
}
test();
alert(hello);//不会弹框显示变量hello的值(liverpool);
如果你把var去掉,那么就会弹出框显示hello的值。
</script>

js语言精粹有讲到过,这个属于全局变量,很不好的写法。
另外按照我的习惯来讲,你们老师这个代码的写法真的挺不好的...

建议还是加上var,虽然在非严格模式下不会保错,但还是要养成好习惯

在函数里面 不加 var 就相当于全局变量,这种用法很危险,建议用 严格模式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏