关于对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程序,用户通过交互的操作来 ...
随机推荐
- REST简析
内容译自英文原文:A Brief Introduction to REST 不知你是否意识到,围绕着什么才是实现异构的应用到应用通信的“正确”方式,一场争论正进行的如火如荼:虽然当前主流的方式明显地集 ...
- leetcode:Reverse Linked List
Reverse a singly linked list. 代码如下: the iterative solution:(c++) /** * Definition for singly-linked ...
- VIM移动
VIM移动 断断续续的使用VIM也一年了,会的始终都是那么几个命令,效率极低 前几个星期把Windows换成了Linux Mint,基本上也稳定了下来 就今晚,我已经下定决心开始新的VIM之旅,顺 ...
- IntelliJ IDEA创建第一个Java小程序
我尝试了汉化,会影响IDE部分功能. 其实IDE完全没必要汉化,就那么几个单词,不懂的话,就有道字典查一下吧. 汉化易于入门,不汉化一样可以使用. 我爱这个编辑器,非常之强大,就是比较占内存. 我爱这 ...
- WP7 MD5加密
WP7不支持MD5加密,在网上找了一个实现MD5加密的算法. //Copyright (c) Microsoft Corporation. All rights reserved. using Sys ...
- tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案
错误代码如下: 严重: IOException while loading persisted sessions: java.io.EOFException java.io.EOFException ...
- UVa 10420 List of Conquests
题意就是有N个pl妹子,然后每行第一个单词是妹子的国籍,后面是妹子的名字. 你的任务就是统计相同国籍妹子的个数,然后按字母表顺序输出. 我首先把所有的国籍都读入,然后用qsort()按字母表顺序排序. ...
- Kafka源码中的Producer Record定义
1.ProducerRecord 含义: 发送给Kafka Broker的key/value 值对 2.内部数据结构: -- Topic (名字) -- PartitionID ( 可选) -- Ke ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...
- linux CPU loading calculate
http://hi.baidu.com/lionpanther/item/e908c37abdaf1c3f71442380 #include <stdio.h>#include <s ...