关于对javascript 提升概念 的总结与思考。
最近在看一本新买的书叫《你不知道的javascript上卷》。。买到这本书也算是个巧合 不过真是物有所值。它对js的几个高级概念都做了非常深刻的描述和通过一些通俗易懂的方式来让我们理解。这篇文就是解决了 一直困扰我的js申明提升的问题。 下面就是我的一些总结和一些笔记。
首先来看一个 例子。
a= 2;
var a;
console.log(a);
看到 这个例子 就让我想到 一直困扰我的一直没有弄明白的在前面申明 和 在后面申明 有时候会出现不同效果的情况。但是一直没有去仔细研究明白过
在这里也许 会有一些朋友认为它可能会输出undefined。因为 因为第二排变量被重新赋值的关系。
但是结果是,这里会输出2;
先不着急 我们再看一个例子。
console.log(a);
var a =2;
这个例子 我相信有人会觉得 可能会输出2 也有可能 有人认为 在console.log之前 还没有申明 var a 所以会抛出 referenceerror的错误。。
但是结果是 输出的却是 undefined;
这里要究其原因,就要讨论一下 javascript 编译器 在这里面所进行的行为。
当编译器看到
var a =2;
这样的语句的时候 并不会像我们理解的一样,把他们一气呵成 就是 申明a 与赋值同时进行 //注意这句话非常重要
而是把他拆分成了
var a;
a =2;
来进行看待。第一个申明 var a 会在编译的时候就进行,而剩下的赋值语句会被留在原地等待执行阶段的时候再执行。
所以照这个逻辑进行理解,也许你就明白为什么会出现上述的行为了。这里我分析当中的第二个例子。
第二个例子会被当成
var a;
console.log(a);
a =2;
这样执行。所以输出的结果是 undefined 是因为已经申明了 却还没有值。
”这个过程就好像变量和函数声明从它们在代码中的位置被移动到了上面,这个过程就叫做 提升“----引用自《你所不知道的javascript上卷》。
最后注意一个地方,无论是函数声明,还是变量声明都会被提升,而函数声明会被首先提升 这里需要注意哟。
关于对javascript 提升概念 的总结与思考。的更多相关文章
- JavaScript基本概念(二)
JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...
- 《JavaScript核心概念》基础部分重点摘录
注:<JavaScript核心概念>适合深入了解JavaScript,比我买的<JavaScript框架设计>语言和内容丰富多了(可能是我水平尚浅吧). 1. 作用域 var ...
- JavaScript的概念,引入,基本数据类型
08.05自我总结 JavaScript 一.概念 JavaScript(下文我们会用简称JS来代替)是脚本编程语言,JS语言开发的文件是以.js为后缀,通过在html文件中引入该js文件来控制htm ...
- JavaScript基本概念(1)-声明提升
声明提升: function > var > other var提升的时候,只是声明提升,但是赋值还是会在原来的位置. Javascript Hoisting:In javascript, ...
- 转:深入理解JavaScript闭包概念
闭包向来给包括JavaScript程序员在内的程序员以神秘,高深的感觉,事实上,闭包的概念在函数式编程语言中算不上是难以理解的知识.如果对作用域,函数为独立的对象这样的基本概念理解较好的话,理解闭包的 ...
- JavaScript基本概念
JavaScript概念:JavaScript是一个弱类型语言,而且不要进行编译,是解释性语言.JavaScript最初是为了处理一些相较简单的数据验证,从而减少客户端与服务器端的通信提升效率,发展至 ...
- Javascript单例模式概念与实例
前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式.代理模式.观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构 ...
- js-js实现,在HTML中使用JavaScript,基本概念
Js实现: 1.JavaScript实现的组成: 核心(ECMAScript):由ECMA-262定义,提供核心语言功能 文档对象模型(DOM)提供访问和操作网页内容的方法以及接口 浏览器对象模型(B ...
- Javascript提升阶段学习
JavaScript1:javascript简介 JavaScript是一种脚本语言,能实现网页内容的交互显示,当用户在客户端显示该网页时,浏览器就会执行JavaScript程序,用户通过交互的操作来 ...
随机推荐
- 《OD学hadoop》第一周0625 LINUX作业一:Linux系统基本命令(一)
1. 1) vim /etc/udev/rules.d/-persistent-net.rules vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE= ...
- hibernate的三种状态(儿)
第五讲:hibernate的三种状态 瞬时:bean对象与session,与数据库无关.在session对象的save方法保存之前. 持久状态(托管):bean对象与session有关,数据库中有对应 ...
- How can I work smarter, not just harder? Ask it forever
How can I work smarter, not just harder? 记住,永远要问自己这个问题.当你发现在做一件事情时,总是那么的繁琐无味,那么一定是出了什么问题. 如果一味地强调更加 ...
- ionic2rc版常见的一些坑
1.config.xml里的包名不能有横杠,否则在build android的时候会报错 <widget id="com.ionicframework.name-abc" v ...
- 漫游Kafka设计篇之消息传输的事务定义
之前讨论了consumer和producer是怎么工作的,现在来讨论一下数据传输方面.数据传输的事务定义通常有以下三种级别: 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输. 最 ...
- Uploadify上传Excel到数据库
前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库. 以前写的这篇文章 Jq ...
- marginCollapse之兄弟关系的DIV
废话不说,直接上图 基本代码如下: 效果图如下: 给两个div分别加marginBottom和marginTop看一下效果 实际效果如下: 我们可以看出两个div之间的距离并不是50+50,而是只显示 ...
- linux echo命令的-n、-e两个参数
echo -n 不换行输出 $echo -n "123" $echo "456" 最终输出 123456 而不是 123 456 echo -e 处理特殊字符 ...
- PHP遍历数组
foreach PHP代码: <?php $url = array( '新浪' =>'www.sina.com' , '雅虎' =>'www ...
- tomcat Manger App
转发链接,嘿嘿http://simeon.blog.51cto.com/18680/58877