js笔记——js里var与变量提升
2016-01-09 21:00
579 查看
var是否可以省略
一般情况下,是可以省略var的,但有两点值得注意:1、
var a=1与
a=1,这两条语句一般情况下作用是一样的。但是前者不能用
delete删除。不过,绝大多数情况下,这种差异是可以忽略的。
2、在函数内部,如果没有用
var进行申明,则创建的变量是全局变量,而不是局部变量了。
所以,建议变量申明加上var关键字。
变量提升
JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
示例:
console.log(a); var a =1;
以上语句并不会报错,只是提示
undefined。实际运行过程:
var a; console.log(a); a =1;
表示变量a已声明,但还未赋值。但是变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升。
console.log(aa); aa =1;
以上代码将会报错:
ReferenceError: aa is not defined。
与普通变量一样,js里的
function也可看做变量,也存在变量提升情况:
a(); function a(){ console.log(1); };
表面上,上面代码好像在声明之前就调用了函数
a。但是实际上,由于“变量提升”,函数
a定义部分被提升到了代码头部,也就是在调用之前已经声明了。但是,如果采用赋值语句定义函数,JavaScript就会报错:
a(); var a = function(){ console.log(1); }; // TypeError: a is not a function
因为,实际运行过程:
var a; a(); a = function(){ console.log(1); };
这时候a是个变量,并非
function。
相关文章推荐
- javascript--"Null"与"undefined"
- javascript之类型陷阱
- javascript--"=="与"==="
- JavaScript计算器
- JavaScript对象(document对象 图片轮播)
- JSP复习----html部分
- Json解析小案例
- javascript类型系统之String
- javascript类型系统之Array
- 学习JS的这些日子——十二月总结
- JS特效文字逐个显示
- js跳转
- htmlunit+Jsoup实现网页抓取
- 遇到过的好用的js框架
- 那些年遇到的js bug
- 详解javascript事件冒泡
- XML文件的解析和json的解析
- JSP+Servlert中的Filter详解
- js父页面中使用子页面的方法
- 实例讲解js验证表单项是否为空的方法