函数提升和变量提升,以及他们的优先级

一、变量提升

在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。

(1) 创建函数有两种形式,一种是函数声明,另外一种是函数字面量,只有函数声明才有变量提升

console.log(a)  // f a() { console.log(a) }
console.log(b) //undefined

function a() {
        console.log(a)
}

var b = function(){
        console.log(b)
}

相当于

var a = ‘function‘
var b
console.log(a)
console.log(b)

(2)变量提升

console.log(c);   //undefined
var c = "第一次没打印出来,第二次才出来";
console.log(c);   //第一次没打印出来,第二次才出来
function fn(){
        console.log(d); //undefined
        var d = ‘和前面的一样啊‘;
        console.log(d); //和前面的一样啊
}

fn();

其实,就相当于

var c ;
console.log(c)
c = " xxxx "
console.log(c)

二、函数提升与变量提升的优先级

console.log(a);    // f a() {console.log(10)}
console.log(a());    //  undefined
var a = 3;

function a() {
        console.log(10) //10
}
console.log(a)   //3
a = 6;
console.log(a());  //a is not a function;

原理 :

    var a = funtion () {
        console.log(10)
    }
    var a;
    console.log(a);    // f a() {console.log(10)}
    console.log(a());  //  undefined

    a = 3;
    console.log(a)   //3
    a = 6;
    console.log(a());   //a() is not a function;
            

由此可见函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。

时间: 2024-11-05 20:42:34

函数提升和变量提升,以及他们的优先级的相关文章

Javascript中函数提升和变量提升

词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Object),简称AO 分析参数 函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,例如AO.age=undefine 接收实参,添加到AO的属性,覆盖之前的undefine 分析变量声明,如var age;或var age=23; 如果上一步分析参数中AO还没有age属性,

js 函数提升和变量提升

问题背景:在写一个非常简单的弹出交互时,定义了一个全局变量和一个方法,这个方法始终调不到这个变量,得到高人指点后,特意总结一下这个知识点: 一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. console.log(global); // undefined var global = 'global'; console.log(global); // global

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

一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: 1 2 3 4 5 6 7 8 9 10 console.log(global); // undefined var global = 'global'; console.log(global); // global function fn () { console.log(a); // unde

变量提升和函数提升

1.变量提升 变量提升是将变量声明提升到它所在作用域的最开始的部分. 2.函数提升 创建函数有两种方式,一种是函数声明,一种是函数表达式,只有函数声明才有函数提升. 3.函数提升和变量提升的优先级 函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖. 原理: 原文地址:https://www.cnblogs.com/LeonMtd/p/9768074.html

一个例子,变量提升和函数提升就是这么简单!

为啥要进行变量提升和函数提升? 引擎在读取js代码的过程中,分为两步.第一个步骤是整个js代码的解析读取,第二个步骤是执行. 在JS代码执行之前,浏览器的解析器在遇到 var 变量名 和function 整个函数 提升到当前作用域的最前面. 记住两句话 1.变量提升只会提升变量名的声明,而不会提升变量的赋值初始化. 2.函数提升的优先级大于变量提升的优先级,即函数提升在变量提升之上. 记住这两句话,就可以从容不迫的撸代码了! console.log(a); var a=1; console.lo

JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程

 壹 ? 引 Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,遗憾的是我在19年才遇到它,比较奇妙的是现在仍有公司会使用这道题.相关解析网上是有的,这里我站在自己的理解做个记录,也算是相关知识的一次复习,题目如下,输出过程也直接标出来了: function Foo() { getName = function () { console.log(1); }; return this; }; Foo.getName = function () { cons

原型模式故事链(4)--JS执行上下文、变量提升、函数声明

上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~哈哈哈 我们前端的代码一般就三个部分组成html + css +js,一般呢我们的JS又会放在最后执行. 执行上下文:所谓的执行上下文,就是JS代码执行的环境. Javascript中代码的运行环境分为以下三种: 全局上下文 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境.

278 执行上下文、执行上下文栈:变量提升与函数提升,执行上下文,执行上下文栈,全局执行上下文,函数执行上下文,练习题

变量提升与函数提升 变量提升: 在变量定义语句之前, 就可以访问到这个变量(undefined) 函数提升: 在函数定义语句之前, 就执行该函数 先有变量提升, 再有函数提升 变量声明提升.函数声明提升 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01_变量声明提升.函数声明提升</title> &l

什么是变量提升?什么是函数提升?

在js中只有两种作用域,全局作用域和函数作用域,在ES6之前,js是没有块级作用域. JavaScript 代码的执行分为两个阶段.第一个阶段在当前词法环境中注册所有的变量和函数声明,简单说就是,解析,解析完成之后,第二个阶段的 JavaScript 执行就开始了! JS中创建函数有两种方式:函数声明式和函数字面量式.只有函数声明才存在函数提升. JavaScript 仅提升声明,而不提升初始化.如果你先使用的变量,再声明并初始化它,变量的值将是 undefined. 1:所有的声明都会提升到作