关于对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程序,用户通过交互的操作来 ...
随机推荐
- [CCPC2016]网赛部分比赛代码
来自HDOJ: 5833 ( Zhu and 772002 ) /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mind! ┛┗┛┗┛┃\○/ ┓┏┓┏┓┃ / ┛┗┛┗┛┃ノ) ┓┏ ...
- RabbitMQ用户角色及权限控制
RabbitMQ的用户角色分类:none.management.policymaker.monitoring.administrator RabbitMQ各类角色描述:none不能访问 managem ...
- linux下gitflow辅助工具安装和使用
gitflow是一个确保nvie推荐的git branch分支策略最佳模型得到有效实施的辅助工具.它作为git的一个子命令而存在. http://nvie.com/posts/a-successful ...
- codeforces 510 C Fox And Names【拓扑排序】
题意:给出n串名字,表示字典序从小到大,求符合这样的字符串排列的字典序 先挨个地遍历字符串,遇到不相同的时候,加边,记录相应的入度 然后就是bfs的过程,如果某一点没有被访问过,且入度为0,则把它加入 ...
- Codeforces 435 B Pasha Maximizes【贪心】
题意:给出一串数字,给出k次交换,每次交换只能交换相邻的两个数,问最多经过k次交换,能够得到的最大的一串数字 从第一个数字往后找k个位置,找出最大的,往前面交换 有思路,可是没有写出代码来---sad ...
- python 包管理
如果导入的模块和主程序在同个目录下,直接import就行了 2.如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件,该文件使得python解释器将子目录 ...
- 【英语】Bingo口语笔记(52) - sleep系列
- php 文件file常用的操作
多是代码形式呈现,更多的信息可以查看php api文档,搜索Filesystem; //创建文件夹 $path_find = AppRoot . '/Temp/excel_curl'; //查找的路径 ...
- oracle interval-partition 解决range分区大难题
博客<oracle分区>中讲了oracle的几种分区,并且对于oracle的典型分区如Range分区和List分区给了示例. 在实际运用Range分区时,遇到了这样的难题: createt ...
- 【转】在Eclipse中使用PyDev进行Python开发
原文网址:http://www.crifan.com/eclipse_use_pydev_develop_python/ 在折腾: [记录]使用Python的IDE:Eclipse+PyDev 的过程 ...