今天见到老师,这样用。问他也没说明白。
虽然不报错,但是感觉很奇怪?
因为是局部代码,可能这些变量在外面已经声明(定义) 过,即它们的左右域包含了这个函数
局部声明,但因为没有加var 关键字作为显式限定,则在一般模式下成为全局变量定义和使用,如果个别变量已经是全局变量了,则直接重新赋值
在严格模式下会报错,提示变量没有声明。
给你看个恶心物:
公司某产品的代码,用了很多年了一直没出问题哦。
注意id和ids,ids并没有声明过,在第二张图片中是第一次出现。
整段代码中,ids这个变量只出现过4次,全部都在图中了。
"use strict";//开启严格模式 在严格模式下,未声明的变量不能直接使用,会报错。
在不使用严格模式的情况下是可以使用的,默认是添加到全局。如果前面已经有地方使用过该变量会被覆盖。
建议 最好按规范写,要不然出错的时候排查起来很费力!
具体原理不太懂,但是有个例子,楼主可以理解下:(理解了原理记得在这里总结一下哦)
<script type='text/javascript'>
function test(){
var hello = 'liverpool';
}
test();
alert(hello);//不会弹框显示变量hello的值(liverpool);
如果你把var去掉,那么就会弹出框显示hello的值。
</script>
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
这种写法叫隐式全局变量,自动声明添加var 为全局变量,一般情况最好不要采用,如果代码量多的情况下,指不定会给你出现错误,到时候你找都找不到