### 不管条件是否成立都要进行变量提升
> 不管条件是否成立,判断体中出现的var/function都会进行变量提升;但是在最新浏览器版本当中,function声明的变量只能提前声明,不能定义了(前提:函数是在判断体重)。
```javascript
// 不管条件是否成立都要进行变量提升
console.log(num);//=>undefined
console.log(fn);//=>undefined
if (1 == 1) {
var num = 12;
function fn() {
}
}
```
> 代码执行到条件判断地方
> [条件不成立]
> 进入不到判断体中,此时之前声明的变量或者函数依然是undefined
> [条件成立]
> 进入条件判断体中的第一件事情不是代码执行,而是把之前变量提升没有定义的函数首先定义了(进入到判断体中函数就定义了,迎合ES6中的块级作用域)。
```javascript
// 不管条件是否成立都要进行变量提升
console.log(num);//=>undefined
console.log(fn);//=>undefined
if (1 == 1) {
console.log(num);//=>undefined
console.log(fn);//=>函数本身---此处条件成立,先把变量提升没定义的函数首先定义了
var num = 12;
function fn() {
}
console.log(num);//=>12
console.log(fn);//=>函数本身
}
```
> 老版本浏览器不是这样处理的:不管条件是否成立,都要进行变量提升(和新版本不一样的地方,新版本function只是声明,老版本function依然是声明+定义)
```javascript
//=>var function 没有提升变量
f = function () {
return true;
}
g = function () {
return false;
}
~function () {
//=>[私有作用域]
//变量提升:g=undefined新浏览器不管条件是否成立,都进行变量提升,只对函数进行声明
//![]false []==![]//=>true true&&true
if (g() && [] == ![]) {//=> Uncaught TypeError: g is not a function
f = function () {//
return false;
};
function g() {
return true;
}
}
}();
console.log(f());
console.log(g());
//新浏览器下 g is not a function
//老浏览器下 false false 273行的f是全局的,把全局修改为了false,276的g是私有作用域,跟全局没有影响,所以还是false
```

js不管条件是否成立都要进行变量提升的更多相关文章

  1. 2 —— js语法 —— 对象和方法的声明 。变量提升。闭包

    一,声明对象 var obj1 = {}; var obj2 = {name:'kk',age:18,fun:function{          // name,age,fun为对象的属性,只是属性 ...

  2. JS中的 变量提升

    首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升( ...

  3. JS高级——变量提升

    JS执行过程 1.首先是预解析:预解析过程最重要的是提升,在JavaScript代码在预解析阶段,会对以var声明的变量名,和function开头的语句块,进行提升操作 2.执行操作 全局中解析和执行 ...

  4. js 1.变量提升 2.条件语句 3.循环语句 4.加号+的使用

    1.变量提升 变量提升是浏览器的一个功能,在运行js 代码执行前,浏览器会给js一个全局作用域叫 window,window 分两个模块,一个叫运营模块,内存模块找到当前作用域下的所有带var和fun ...

  5. Shell [[]]详解:检测某个条件是否成立

    [[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立. test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好:test 做不到的,[[ ]] 还能 ...

  6. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  7. js多条件if语句简写发生Uncaught SyntaxError: Unexpected token }

    改写原生js 多条件if判断语句时,采用三元方法,发生Uncaught SyntaxError: Unexpected token } function compareImgSize() { var ...

  8. Vue.js:条件与循环

    ylbtech-Vue.js:条件与循环 1.返回顶部 1. Vue.js 条件与循环 条件判断 v-if 条件判断使用 v-if 指令: v-if 指令 在元素 和 template 中使用 v-i ...

  9. [js]变量提升-关于条件

    条件函数变量提示于全局中函数变量提升不一样. 条件中: 函数变量提升, 只是声明(现新版本浏览器中) if(g()){ function g() { return true } console.log ...

随机推荐

  1. 开源.net 混淆器ConfuserEx介绍 [转]

    今天给大家介绍一个开源.net混淆器——ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotf ...

  2. Ubuntu14.04下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)

    不多说,直接上干货! 写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentO ...

  3. C# OracleHelper

    using System; using System.Configuration; using System.Data; using System.Collections; using Oracle. ...

  4. C语言读写配置文件--转载

    http://www.oschina.net/code/snippet_4873_2503 [].[代码] CException.h 跳至 [] [] [] /******************** ...

  5. Linux下如何查看版本信息(转)

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然.   1.# uname -a   (Linux查看版本当前操作系统内核信息)   L ...

  6. 【angular5项目积累总结】遇到的一些问题以及解决办法

    1.项目中字符串特别是\r\n,替换成br之后,在页面换行无法生效? 答:绑定元素 innerHTML. <div class="panel-body" [innerHTML ...

  7. [转]RDL(C) Report Design Step by Step 3: Mail Label

    本文转自:http://www.cnblogs.com/waxdoll/archive/2006/09/02/493350.html Crystal Report在报表向导中提供了三种向导类型给用户进 ...

  8. excel 工作表如何插入当前日期时间

    在EXCEL表格中,插入当前的日期或是插入当前的时间:我们都可以用快捷键或时间函数来实现 插入当前日期 快捷键方法: 比如,显示日期的单元格为A1单元格: 今天是2018年6月8日: 鼠标点一下A1单 ...

  9. 云主机安装Tomcat上传自己的网站

    前几天在DigitalOcean上买一个云服务器(1g内存,1核,25gssd,1tb流量,一个月5$,按天收费),用github的students developer package里面的优惠码拿到 ...

  10. Docker学习之基本概念

    Docker学习之基本概念 作为一个后端noder,不了解docker有点说不过去,这节开始,学习一些docker层面的东西. 什么是docker Docker最初是dotCloud公司创始人Solo ...