`
leeqq
  • 浏览: 137077 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js 变量提升

    博客分类:
  • web
阅读更多

想起来前段时间面试的时候遇到个问题,是关于变量提升的,记不得当时怎么答的了,今天再记一下

 

var k = 9;
function hoist(){
  k = 8;
  console.log(k);
}
hoist();
console.log(k);

 这里两次console.log输出k   结果是两次输出8,在hoist方法内部的 k 引用的是函数外部定义的 k , 不难理解

 

 

 

var k = 9;
function hoist(){
  var k = 8;
  console.log(k);
}
hoist();
console.log(k);

 这里两次输出 k , 结果是 8 和 9。hoist方法内部定义了局部变量并赋值8,全局变量k仍然是9。

 

 

var k = 9;
function hoist(){

  console.log(k);
  var k = 8;
  console.log(k);
}
hoist();
console.log(k);

 

这里hoist方法内部先输出 k ,然后定义局部变量,此时不要以为第一次的 k 是全局变量或者是后面的局部变量8。正确结果是undefined, 然后 是 8, 最后输出的是 9。

 

原因是javascript的变量声明具有hoisting机制。上面的代码相当于下面的代码

var k = 9;
function hoist(){
  var k;
  console.log(k);
  k = 8;
  console.log(k);
}
hoist();
console.log(k);

 这样就好理解多了。

 

其实就是相当于把变量定义提升到顶部,但是初始化过程不会被提升。

 

函数也有类似过程

function hoist(){
  inner();
  function inner(){
    console.log('inner');
  }
}
hoist();

 代码书写上调用inner的时候这个函数其实还没定义, 但是依然能正确调用,输出 ‘inner’

 

function hoist(){
  inner();
  var inner = function(){
    console.log('inner');
  }
}
hoist();

 这里采用函数表达式 的方法定义一个函数,这里提示 ‘inner is not a function’

 

这种情况可以参考变量提升。相当于以下代码

function hoist(){
  var inner;
  inner();
  inner = function(){
    console.log('inner');
  }
}
hoist();

 这样也就 好理解了

分享到:
评论

相关推荐

    JS变量提升原理与用法实例浅析

    本文实例讲述了JS变量提升。分享给大家供大家参考,具体如下: 该篇介绍什么是变量提升,写给像我一样的JS新手看的 简单来说变量提升就是 JS会把var变量的声明自动提升到作用域的顶部,即使你不想这样 一个例子: (局部...

    JS变量提升及函数提升实例解析

    JavaScript中的变量提升(Variable Hoisting)和函数提升(Function Hoisting)是理解JS代码执行机制的关键概念。在JS中,作用域分为全局作用域和函数作用域,而在ES6引入了块级作用域(例如使用`let`和`const`声明...

    最通俗易懂的javascript变量提升详解

    JavaScript中的变量提升(Variable Hoisting)是编程时需要理解的关键概念,它涉及到JavaScript引擎如何处理变量和函数的声明。变量提升是指在JavaScript代码执行前,引擎会将所有的`var`和函数声明移动到它们所在...

    javascript变量提升和闭包理解

    ### JavaScript变量提升 变量提升是JavaScript语言的一个重要特性,它允许声明的变量和函数在声明之前就可以使用。这一机制是JavaScript引擎在代码执行之前进行预编译时发生的,它将变量声明和函数声明从原来的位置...

    JavaScript变量提升和严格模式实例分析

    JavaScript变量提升和严格模式是JavaScript编程中的两个重要概念,它们影响着代码的执行和变量的管理。 变量提升是指在JavaScript代码执行之前,函数声明和变量声明会从原来的位置被移动到其所在作用域的顶部。这一...

    详解javascript 变量提升(Hoisting)

    以下是关于JavaScript变量提升的一些关键知识点: 1. **声明提升**: - 变量声明(`var`、`let`、`const`)在执行环境的当前作用域顶部被“提升”。但请注意,`let`和`const`在ES6引入后,它们不再遵循完全的提升...

    【JavaScript源代码】JavaScript中变量提升和函数提升实例详解.docx

    变量提升和函数提升在JavaScript中的应用 JavaScript是一种基于对象的脚本语言,广泛应用于Web开发中。其中,变量提升和函数提升是JavaScript语言中两个非常重要的概念。变量提升和函数提升是JavaScript语言的核心...

    JavaScript中变量提升和函数提升的详解

    第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升。这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下。 今天主要介绍以下几点: 1. 变量提升 2. 函数提升 3....

    js变量提升深入理解

    在JavaScript编程中,变量提升(hoisting)是一个重要的概念,它涉及函数作用域和变量声明。变量提升指的是在函数中声明的变量会在函数体内的任何代码执行之前被移动到函数的顶部。这种行为是由JavaScript的执行机制...

    基于js的变量提升和函数提升(详解)

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

    JavaScript 变量提升

    JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。 JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。 以下两个实例将获得相同的结果: 实例 1 x = 5; // 变量 x...

    JS变量问题详解

    关于变量的问题,除了作用域和声明关键字外,还可能涉及变量提升、作用域链、闭包、全局变量、垃圾回收等概念。由于这些概念相对复杂,对于初学者来说,可能会出现理解上的困难。因此,建议通过阅读官方文档、查阅...

    详解javascript中的变量提升和函数提升

    JavaScript中的变量提升(Variable Hoisting)和函数提升(Function Hoisting)是理解JavaScript执行机制的关键概念,它们在JavaScript代码解析和执行过程中起着至关重要的作用。本文将详细讲解这两个概念,帮助...

    js变量作用域

    如果在一个函数内部不使用`var`、`let`或`const`声明变量,则该变量会自动提升为全局变量。 **示例代码**: ```javascript function test() { val = 'hello!'; // 没有使用var声明,因此val是一个全局变量 } test()...

Global site tag (gtag.js) - Google Analytics