资讯专栏INFORMATION COLUMN

js声明提升

SexySix / 2408人阅读

摘要:变量声明提升变量作用域指变量起作用的范围。全局变量在全局都拥有定义而局部变量只能在函数内有效。在函数体内,同名的局部变量或者参数的优先级会高于全局变量。

浏览器引擎会在解释javascript代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来,包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理,置于作用域前端。

变量声明提升

变量作用域指变量起作用的范围。变量分为全局变量和局部变量。全局变量在全局都拥有定义;而局部变量只能在函数内有效。

在函数体内,同名的局部变量或者参数的优先级会高于全局变量。也就是说,如果函数内存在和全局变量同名的局部变量或者参数,那么全局变量将会被局部变量覆盖。
es6前是没有块级作用域的,通过声明提升变量无论在哪里声明,都会有定义,只有定义没有值是undefined

   console.log(a);
   var a=1;
   console.log(a);

上面函数执行时类似如下过程

  var a;
  console.log(a);
  a=1;
  console.log(a);
函数声明提升

函数的创建方式

函数声明
函数表达式

函数声明 function handleClick(){}
函数表达式 var a=function(){}

两种方式不同点 函数声明有有声明的提升,表达式只有定义以后才能使用
下面例子可以看出

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

当函数和变量的声明,前者优先级更高

 "use strict";
 console.log(a); // fn a
 function a (){

 }
 var a=1;
 console.log(a); // a 1 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88565.html

相关文章

  • 5分钟深入了解js变量提升

    摘要:对于大多数开发者来说,变量提升可以说是一个非常常见的问题,但是可能很多人对其不是特别的了解。如果说拥有和一样的变量提升效果的话,那么应该是输出。而和它们的变量提升的效果是一样的,也都存在着临死性死区的概念。 对于大多数js开发者来说,变量提升可以说是一个非常常见的问题,但是可能很多人对其不是特别的了解。所以在此,我想来讲一讲。 先从一个简单的例子来入门: a = 2; var a; ...

    tinysun1234 评论0 收藏0
  • js变量提升与函数提升的机制

    摘要:所谓变量提升,提升就是为了事先声明变量。变量提升之后,但其赋值还是留在原本的位置等运行到了之后动态赋值,而函数提升之后直接相当于在代码里抽空了。搞明白这个例子也就搞懂了作用域中变量和函数是怎么提升的。 问题 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在这个例子中它应该输出什么?输出的结果是6。 showImg(h...

    fasss 评论0 收藏0
  • 深入理解 js 声明提升( 尾部有总结 和 面试题解析 )

    摘要:要理解函数的提升行为,让我们先解析什么是的提升。也就是说声明提升了,赋值还留着原地,等待执行。声明被提升,而包括函数表达式的赋值在内的赋值操作并不会提升,而是留在原地等待执行。 javaScript自上而下执行的顺序受到很多新手和部分老手的共识,但是这其实并不完全正确,这涉及到js的编译过程,这方面我们稍后会聊到,先考虑下面代码: window.onload = function(){...

    curlyCheng 评论0 收藏0
  • js函数声明提升与变量提升

    摘要:在编译阶段,函数声明和变量声明都会被先处理置于执行环境的顶部,且赋值会被留在原地,这个过程称之为提升。另外函数声明提升不会被变量声明覆盖,但会被变量赋值覆盖。 看到相关的前端面试题,总结一下知识点,大神请飘过。JS在编译阶段,函数声明和变量声明都会被先处理置于执行环境的顶部,且赋值会被留在原地,这个过程称之为提升。举个简单例子: console.log(i); var i = 1; f...

    Rindia 评论0 收藏0
  • ES6 变量作用域与提升:变量的生命周期详解

    摘要:不同的是函数体并不会再被提升至函数作用域头部,而仅会被提升到块级作用域头部避免全局变量在计算机编程中,全局变量指的是在所有作用域中都能访问的变量。 ES6 变量作用域与提升:变量的生命周期详解从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章。本文详细讨论了 JavaScript 中作用域、执行上下文、不同作用域下变量提升与函数提升的表现、顶层对象以及如何避免创建...

    lmxdawn 评论0 收藏0
  • 原型模式故事链(4)--JS执行上下文、变量提升、函数声明

    摘要:代码在执行之前会先全局中变量提升函数声明。函数的执行上下文,也就是在这个函数范围内找到函数执行上下文中函数范围内,所有用声明的变量。函数执行时,按照执行位置查找变量作用域只会向上查找。下一回变量作用域与闭包 上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧。对变量提升和函数声明的理解,能让你更清楚容易的理解,...

    melody_lql 评论0 收藏0

发表评论

0条评论

SexySix

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<