美文网首页
深入理解js变量提升和函数提升

深入理解js变量提升和函数提升

作者: zx一个胖子 | 来源:发表于2018-07-13 10:42 被阅读0次

一. 变量提升

console.log(a); // undefined
var a= 11;
console.log(a); // 11
 
function fn () {
  console.log(a); // undefined
  var a = 'aaa';
  console.log(a); // aaa
}
fn();

这就是变量提升,实际上它的执行顺寻为:

var a;
console.log(a);//undefined
a = 11;
console.log(a);//11

function fn(){
    var a;
    console.log(a); 声明但并没有赋值
    a = 22;
    console.log(a);//22
}

二. 函数提升
js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!

console.log(fn1) //f1(){}
console.log(fn2) //undefined
function fn1(){}
var fn2 = function(){}

由于函数提升,实际执行顺序为:

var fn2;
function fn1(){}; // 函数提升,提升到最开始
console.log(fn1) //f1(){}
console.log(fn2) //undefined, 变量并没有赋值
var fn2 = function(){}

三. 练习

console.log(f1()); // undefined 这个地方,如果是f1 则打印出整个f1函数,如果是f1() 则会先执行f1函数,然后打印函数执行结果,为undefined; 如果函数f1中有个return的值,那么将会打印函数返回值。
console.log(f2); //undefined
function f1() {console.log('aa')} //aa
var f2 = function() {}
var total = 50;
function ss(num){
    total = num*num; // 如果在这个再声明一下total, 则整个函数就会先打印 50 再打印 400
    return total;
}
var number = ss(20);
consoel.log(total) //400 先执行了ss()
consoel.log(number) //400
(function() {
    console.log(a); // undefined 
    a = 'aaa'; //这里的变量a其实已经局部声明了,在次只是进行赋值;
    var a = 'bbb'; 这里是函数局部声明了变量,改变了之前的变量a。
    console.log(a);
})();

四. hoisting(提升)

    在Javascript语言中,变量的声明(注意不包含变量初始化)会被提升(置顶)到声明所在的上下文。
 也就是说,在变量的作用域内,不管变量在何处声明,都会被提升到作用域的顶部,但是变量初始化的顺序不变。

五. 变量重复声明

var a = 123;
var a;
console.log(a) // 123

var a = 123;
var a = 456;
console.log(a) // 456

//如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色.
//如果重复使用的一个声明没有一个初始值,那么它不会对原来存在的变量有任何的影响.

相关文章

  • js 的变量提升和函数提升

    1. 深入理解 js 的变量提升和函数提升 先了解:js没有块级作用域,只有全局作用域,和函数作用域 相同的函数名...

  • 深入理解js变量提升和函数提升

    一. 变量提升 这就是变量提升,实际上它的执行顺寻为: 二. 函数提升js中创建函数有两种方式:函数声明式和函数字...

  • 深入理解 js 函数提升和变量提升

    javaScript自上而下执行的顺序受到很多新手和部分老手的共识,但是这其实并不完全正确,这涉及到js的编译过程...

  • 深入理解JS变量提升和函数提升

    1.作用域简介 作用域最大的用处:隔离变量,不同作用域下同名变量之间不会有冲突 作用域中变量值在执行过程中产生,而...

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • 深入理解js的变量提升和函数提升

    一、变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域...

  • 深入理解js的变量提升和函数提升

    一、变量提升在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和...

  • 深入理解js的变量提升和函数提升

    一、变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域...

  • 前端资料

    ES6新数据类型 Symbol . js变量提升函数提升 js this js 原型及原型链理解 new做了什么 ...

  • JS当中的变量提升(预解析)

    函数和变量声明的提升 在JS中存在一个很重要的特性,函数和变量声明的提升,理解这一点对于理解我们编写的代码非常有帮...

网友评论

      本文标题:深入理解js变量提升和函数提升

      本文链接:https://www.haomeiwen.com/subject/afkjpftx.html