提示不多说,记住几个要点:

1.变量和函数都会提升,如下

a = 2;

var a ;

console.log(a); //

fn();//

function fn(){
console.log(1);
}

2.函数会被提升但是,函数表达式不会(ReferenceError)

fn(); 

var f = function fn(){
console.log(1);
}
//ReferenceError: fn is not defined
fn(); 

var fn = function f(){
console.log(1);
}
// TypeError: fn is not a function
var fn = function f(){
console.log(1);
} ; fn(); //
f();//TypeError: f is not a function

实际上第三种看得出来无论函数表达式在哪个位置声明,f() 都相当于是一个匿名函数,并把引用赋值给了fn;

3.函数首先会被提升(函数优先)

foo();//1

var foo;

function foo(){
console.log(1);
} foo = function(){
console.log(2);
}

输出1 二不是2,因为foo是普通变量声明,函数会被首先声明且foo 为重复的声明;

foo();//
function foo(){
console.log(1);
} foo = function(){
console.log(2);
};
function foo(){
console.log(1);
} foo = function(){
console.log(2);
}; foo()//

对比一下,function声明的2种写法,可以看出,var foo = function(){..} 会首先声明一个普通变量,也就是LHS,然后通过RHS 把匿名函数的引用赋值个它,实际上 变量foo是获得了这个匿名函数的引用,

而function(){...} 是直接声明函数,这两点是本质上的区别。

4.函数不会经过添加判断所控制

fn();//

var a = true;

if(a){
function fn()(console.log(1));
}else{
function fn(){console.log(2)}
} // 下面这个会打印出1 var a = true; if(a){
function fn(){console.log(1)};
}else{
function fn(){console.log(2)}
};
fn();

再看下下面的截图:

fn刚开始是未定义的,第二次说明fn被声明了,但是不是一个函数,打印出来看到了,并没有赋值~

所以,所以~  最好不要使用条件判断来控制函数的声明。

JS 提升 p4的更多相关文章

  1. JavaScript prototype.js提升JavaScript开发效率

    参考链接:http://www.yiibai.com/prototype/ Prototype提供主要方法类别: Prototype概述 Prototype实用功能 Prototype实用方法 Pro ...

  2. 用 Flask 来写个轻博客 (28) — 使用 Flask-Assets 压缩 CSS/JS 提升网页加载速度

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Flask-Assets 将 Flask-Assets 应用 ...

  3. flv.js的追帧、断流重连及实时更新的直播优化方案

    目录 1. 前言 2. 前端直播 2.1 常见直播协议 2.2 flv.js 的原理 2.3 flv.js 的简单使用 3. flv.js 的优化方案 3.1 追帧-解决延迟累积问题 3.2 断流重连 ...

  4. 《JavaScript 代码优化指南》

      ~~教你向老鸟一样敲代码~~. 1. 将脚本放在页面的底部 ... <script src="./jquery.min.js"></script> &l ...

  5. JavaScript代码优化指南

    1. 将脚本放在页面的底部 <script src="./jquery.min.js"></script> <script src="./i ...

  6. 前端编码风格规范之 JavaScript 规范

    JavaScript 规范 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域.这 ...

  7. 前端编码风格规范(3)—— JavaScript 规范

    JavaScript 规范 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域.这 ...

  8. JavaScript 的 作用域

    在看了几本书之后的一些理解和自己的想法.   作用域,变量的作用范围   在ES6之前 变量的声明   只有var可以声明变量属于某个作用域,并且,也只有全局作用域和函数作用域. (没有var声明的变 ...

  9. JavaScript—var lef const区别

    今天刚刚学JavaScript 因为以前学过.学起来也就轻松.今天在练习.流程控制语句的时候,用WebStrom 写的时候 var 声明变量的时候 下面老是有一条白线.开始以为是开发环境有问题 然后, ...

随机推荐

  1. 安装openvpn

    1.安装服务器端openvpn  yum install -y openvpn easy-rsa 如果已存在的yum源中找不安装文件,则可通过以下安装epel yum源 rpm -ivh http:/ ...

  2. HTML元素ID和JS方法名重复,JS调用失败

    HTML元素ID和JS方法名重复时,JS中的重名方法无法被找到,不能执行. 修改ID或者方法名,两者不一致即可.

  3. 7. Bagging & Random Forest

    通过前面集成学习的介绍我们知道,欲得到泛化性能强的集成学习器,集成中个体学习器应尽量相互独立:虽然“独立”在现实任务中无法做到,但可以设法使基学习器尽可能具有较大差异. 1. Bagging 自助采样 ...

  4. 课程一(Neural Networks and Deep Learning),第四周(Deep Neural Networks)—— 1.Practice Questions: Key concepts on Deep Neural Networks

    [解释] [解释] 比如算法中的learing rateα(学习率).iterations(梯度下降法循环的数量).L(隐藏层数目).n[l] (隐藏层单元数目).choice of activati ...

  5. 用SpringSecurity从零搭建pc项目-01

    注:之前写过一些列的SpringSecurity的文章,重新写一遍是为了把某些不必要的步骤省去,留下精简的,因为工作中有一些不需要. 在java的权限框架里,shiro和SpringSecurity是 ...

  6. php -- 数据库信息

    ----- 023-dbinfo.php ----- <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  7. guava EventBus 消息总线的运用

    public class Test { public static void main(String[] args) { final EventBus eventBus = new EventBus( ...

  8. mysql pdo设置显示报错

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    

  9. NHibernate with ASP.NET MVC 入门示例

    目的:初步了解NHibernate的用法,包括数据库的CRUD, 基于ASP.NET MVC 项目模板 步骤: 创建ASP.NET MVC 新项目 使用NuGet引入FluentNHibernate ...

  10. async & await 异步编程小示例,一看就懂

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...