关于对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程序,用户通过交互的操作来 ...
随机推荐
- pl/sql programming 05 循环迭代处理
使用循环应考虑的因素 1. 循环什么时候结束 2. 什么时候测试是否该结束循环 3. 采用这种循环的原因 1. 普通循环(简单循环) 使用场合, 不能确定循环执行多少次, 要求循环至少执行一次. 另外 ...
- Java关键字static、final
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- 打印机C++
m_prnDC.SetMapMode(MM_LOMETRIC); m_iPrnX = m_prnDC.GetDeviceCaps(HORZRES);m_iPrnY = m_prnDC.GetDevi ...
- python练习程序(c100经典例8)
题目: 输出9*9口诀. for i in range(1,10): for j in range(1,i+1): print str(j)+"*"+str(i)+"=& ...
- *ecshop 模板中foreach用法详解
1.foreach分以下几个参数 from, item, name, iteration, index 2.使用foreach循环 如果php要传递一个数组(如:$array)给ecshop ...
- java生成简单Excel工作薄
前言: 代码都是建立在实际需求上的,上周做完一个调外部电影券接口的项目,这周产品又要excel表格,大致内容为:券所属影院.图片URL.等信息制作为excel表格,把每次同步过来的数据给他分析. jx ...
- StringUtils判断字符串是否为空的方法
public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 下面是 Stri ...
- 【转】JavaSript模块规范 - AMD规范与CMD规范介绍
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题 ...
- aspose.word 查找文本并加下划线
private Run SplitRun(Run run, int position) { Run beforeRun = (Run)run.Clone(true); beforeRun.Text = ...
- Excel的最大行数
使用Excel2007或Excel2010,在“另存为” 菜单中可以选择为“Excel 07-2003 工作薄”,从中我们可以看出,到了2007版以后,存储格式变了,简单一点从扩展名便可以看出,一个是 ...