那些容易忽略的事3-(变量提升和函数提升)

1、变量提升:只要变量在代码中进行了声明,无论它在哪个位置上进行声明, js引擎都会将它的声明放在范围作用域的顶部;

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

2、函数提升:只要函数在代码中进行了声明,无论它在哪个位置上进行声明, js引擎都会将它的声明放在范围作用域的顶部;

console.log(b); //function b(){}
function b(){};

从上可以看出,变量或函数声明都会别放到当前作用域的顶部,那么问题来了:如果变量和函数重名那么熟轻熟重呢?谁的优先等级更高呢?

var a;
function a(){};
console.log(a); //function a(){}

function b(){};
var b;
console.log(b); //function b(){}

var c=1;
function c(){}
console.log(c); //1

function d(){};
var d=1;
console.log(d); //1

总结:变量申明和函数申明重名时,

不管二者声明的顺序,函数声明会覆盖变量声明,也就是说,此时a的值是声明的函数function a() {}。

注意:如果在变量声明的同时初始化a,或是之后对a进行赋值,此时a的值是变量的值。

也就是说:a===undefined ? a===函数 :a===变量

时间: 2024-07-30 05:29:08

那些容易忽略的事3-(变量提升和函数提升)的相关文章

JavaScript系列文章:变量提升和函数提升

第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函数提升 3. 为什么要进行提升 4. 最佳实践 那么,我们就开始进入主题吧. 1. 变量提升 通常JS引擎会在正式执行之前先进行一次预编译,在这个过程中,首先将变量声明及函数声明提升至当前作用域的顶端,然后进行接下来的处理.(注:当前流行的JS引擎大都对源码进行了编译,由于引擎的不同,编译形式也会有

对javascript变量提升跟函数提升的理解

在写javascript代码的时候,经常会碰到一些奇怪的问题,例如: console.log(typeof hello); var hello = 123;//变量 function hello(){//函数声明 } console.log(typeof hello); var hello = function(){//函数表达式 } console.log(typeof hello);//function number function 对于为什么会是这样的一个结果:function numb

变量提升,函数提升概念及相关题

之前总是对变量提升,函数提升一知半解,随着时间的推移,理解的越来越深刻,接下来就写一写,有不对的地方请大家指出来. 1) 变量提升 1. 通过var定义(声明)的变量, 在定义语句之前就可以访问到2. 值: undefined console.log(a)//undefined var a = 1111; console.log(a)//1111 等同于 var a = undefined console.log(a) //undefined a = 1111; console.log(a) /

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

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

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

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

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

1在js中只有两种作用域 a:全局作用域 b:函数作用域 在ES6之前,js是没有块级作用域. 首先来解释一下什么是没有块级作用域? 所以此时 是可以打印输出变量a的值. 2:什么是变量提升? 在我们的js中,代码的执行时分两步走的,1.解析 2.一步一步执行 那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去. 那么上面这种写法其实等价于下面这种写法: 看几个例子: 把上面的例子稍作改动: 结果就会大不一样, 再看一个例

js变量提升和函数提升

变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭.大部分编程语言的变量有块级作用域,如if.for.while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有自己独有的特性--变量提升.(ES6新添加的let.const使其可以用块级作用域) 对于函数的变量访问时遵循作用域链的,即当前函数运行时会有一个当前作用域,当饮用某个变量时,会先查找当前作用域内是否存在该变量的定义,如果不存在则根据作用域链向上去查找父函数的作用域,有则拿来使用,没有则继续向上直到

深入理解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

js变量提升与函数提升

在es6之前,js语言并没有块级作用域,即{}形成的作用域,只有全局作用域和函数作用域,所谓的提升,即是将该变量的声明或者函数的声明提升,举个例子 console.log(global); //undefined var global = 111; console.log(global);//111 显然,上面代码处于一个全局的作用域中,在该作用域中使用var声明了一个global变量,其实际的声明过程如下: var global; console.log(global); //undefine