目录

一、概念理解

1.变量声明提升

2.函数声明提升(又叫函数提升)

变量提升和函数提升的优先级

小结:


一、概念理解

变量提升:在当前作用于中,js代码自上而下执行之前,浏览器会把所有带var/function关键字进行提前声明或定义。带var的关键字只是提前声明一下,带function的关键字在变量提升阶段把定义和声明都完成了。

1.变量声明提升

通过 var 定义(声明)的变量,在定义语句之前就可以访问到

值:undefined,只是当时的值是undefined

2.函数声明提升(又叫函数提升)

通过 function 声明的函数,在声明语句之前就可以直接调用

值:函数定义(对象)

js中创建函数有两种方式:函数声明式和函数字面量式(又叫函数表达式、匿名函数)。只有函数声明才存在函数提升!如:

关于函数声明的方式可参考函数声明以及调用的方式

  console.log(f1); // function f1() {}  console.log(f2); // undefined function  f1() {}  // 函数声明式var f2 = function() {}  // 函数字面量式

只所以会有以上的打印结果,是由于js中的函数提升导致代码实际上是按照以下来执行的:

function f1() {} // 函数提升,整个代码块提升到文件的最开始console.log(f1);   console.log(f2);var f2 = function() {}
  console.log(global); // undefinedvar global = 'global';console.log(global); // globalfunction fn () {console.log(a); // undefinedvar = 'abc';console.log(a); // abc}fn();var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值console.log(global); // undefinedglobal = 'global'; // 此时才赋值console.log(global); // 打印出globalfunction fn () {var a; // 变量提升,函数作用域范围内console.log(a);a = 'abc';console.log(a);}fn();

变量提升和函数提升的优先级

在函数与变量之间,函数首先会被提升,然后才是变量。

console.log(xy) //function xy(){console.log('hello')}var xy;
var z = 'def'function xy (){
console.log(z) //undefined
var z = 'abc';
console.log(z) //abc
}
xy();

函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。

     console.log(xy) //function xy(){console.log('hello')}var xy = 5;var z = 'def'function xy (){console.log(z) //undefinedvar z = 'abc'; console.log(z) //abc} xy();   // 报错Uncaught TypeError: xy is not a function 因为被变量赋值覆盖了

函数内部变量提升优先级高于函数外部变量提升(这里还涉及到作用域的问题)

     var z = 'def'function xy (){console.log(z) //undefinedvar z = 'abc'; console.log(z) //abc} xy();---------------------------------------------------------var z = 'def'function xy (){console.log(z) // def// var z = 'abc'; console.log(z) //def} xy();

小结:

函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。

在js中变量和函数的声明会提升到最顶部执行

函数的提升高于变量的提升

函数内部如果用 var 声明了相同名称的外部变量,函数将不再向上寻找。

匿名函数不会提升。

JS变量(声明)提升和函数声明提升相关推荐

  1. JavaScript 中的 Hoisting (变量提升和函数声明提升)

    如何将 函数声明 / 变量 "移动" 到作用域的顶部. 术语 Hoisting(提升) 在很多 JavaScript 博文中被用来解释标识符的解析.其实 Hoisting(提升) ...

  2. js中变量名提升和函数名提升

    首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域. 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值.所以变量名提升和函数名提升非常相像. 1.变量名的提升发生 ...

  3. c语言常用的格式声明,c语言函数声明格式是什么

    c语言函数声明格式是什么 c语言函数声明格式是"函数类型 函数名称(参数列表);".在函数声明中的参数列表中,不需要给出具体的变量名称,但必须给出每个变量的类型. 函数声明,不是说 ...

  4. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  5. python是什么语言、即变量不需要显示声明数据类型-Python函数声明以及与其他编程语言数据类型的比较...

    ** 1.函数声明 ** 与其它大多数语言一样 Python 有函数,但是它没有像 C++ 一样的独立的头文件:或者像 Pascal 一样的分离的 interface / implementation ...

  6. 函数声明和变量声明提升

    var a; // 声明一个变量,标识符为a function a() { // 声明一个函数,标示符也为a } alert(typeof a); 显示的是"function",即 ...

  7. js中立即执行函数会预编译吗_js变量提升和函数提升

    把变量提升函数提升拿出来讲,一看就知道是老前端搬砖工了,其实这些js的基础本质的东西,很有必要去了解,可以活跃思维,而且可以在研究这个的过程中,找到当初设计这门语言的人的想法,然后让自己不仅仅是对这个 ...

  8. JS变量提升和函数提升的顺序

    1.变量的提升: 变量名会提升到 '当前作用域' 顶部,此时该变量为undefined,未赋值,赋值是在js原位置. console.log(a); // undefined var a = 10 c ...

  9. JavaScript函数声明提升

    首先,JavaScript中函数有两种创建方式,即函数声明.函数表达式两种. 1.函数声明. function boo(){console.log(123); } boo() 2.函数表达式. var ...

最新文章

  1. BZOJ3782 上学路线 【dp + Lucas + CRT】
  2. 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂
  3. How to make a proposal?
  4. 遇到tensorflow has no attribute 问题
  5. RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)
  6. EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据
  7. 日志汇总:logging、logger
  8. PAT乙类1007之素数对猜想
  9. Linux服务器iops性能测试-fio
  10. 怎样安装ubuntu系统
  11. 除了国内红海拼刀,移动 App 在海外能否挖到新机会?
  12. E: Sub-process /usr/bin/dpkg returned an error code (1)
  13. B00015 C++实现的图类
  14. 【语音识别】基于matlab DWT算法0~9数字语音识别【含Matlab源码 1726期】
  15. 【高登世德:为资产证券化引入区块链技术】GBCAX
  16. 华为天才少年年薪201万,作息时间表曝光:所有的逆袭,都是蓄谋已久
  17. 一键轻松设置项目代理
  18. python职能-python运维工程师主要干什么
  19. 实习生招聘--CVTE笔试【1】
  20. css !important用法以及CSS样式使用优先级判断

热门文章

  1. 三月桃花开,用python给你带来你的桃花运,详细解析画一棵表白树!
  2. 简述HTTP请求过程
  3. C++面向对象程序设计:编写重载函数Max1(或使用函数模板)分别求取两个整数,三个整数,两个双精度,三个双精度数的最大值。
  4. Python使用numpy与pandas计算数组元素的变化率
  5. 测绘资质涉密证-地理信息安全在线培训考试系统注意事项
  6. 永恒之柱2显示服务器,永恒之柱2游戏黑屏是什么原因怎么解决_画面显示不全解决方法教程攻略...
  7. 7-3 随意组合dfs
  8. jquery所有版本下载地址
  9. 毕业设计-微信小程序商城
  10. 为什么魂系列的叙事如此迷人?