当前位置: 首页 > 编程笔记 >

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

王宏扬
2023-03-14
本文向大家介绍JS变量提升原理与用法实例浅析,包括了JS变量提升原理与用法实例浅析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了JS变量提升。分享给大家供大家参考,具体如下:

该篇介绍什么是变量提升,写给像我一样的JS新手看的

简单来说变量提升就是 JS会把var变量的声明自动提升到作用域的顶部,即使你不想这样

一个例子: (局部变量与全局变量同名时 , 局部变量覆盖全局变量)

var a="全局变量";
function test()
{
  document.writeln(a);
  var a="局部变量";
  document.writeln(a);
}
test();

上例的两个输出结果是

undefined局部变量

第一个输出并没有输出全局变量a而是undefined ,这就是变量提升导致的

上例等同与下例:

var a="全局变量";
function test()
{
  var a;
  document.writeln(a);
  a="局部变量";
  document.writeln(a);
}
test();

test函数内即使局部变量a还没定义,就已经覆盖了全局变量,可见其声明已经生效了,

变量声明会自动提升到作用域的顶部, 即使该语句并没执行

如下例:

var x=100;
var y=200;
function test()
{
  document.writeln(x);
  document.writeln(y);
  if(false)
  {
    var x=1;
  }
  return;
  var y=2;
}
test();

输出结果:

undefinedundefined

等同如下形式:

var x=100;
var y=200;
function test()
{
  var x,y;
  document.writeln(x);
  document.writeln(y);
  if(false)
  {
    x=1;
  }
  return;
  y=2;
}
test();

那么怎么解决这个问题呢?

用let变量!let变量执行到定义部分才会装载,具体用法请自行查询!

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

 类似资料:
  • 本文向大家介绍js变量提升深入理解,包括了js变量提升深入理解的使用技巧和注意事项,需要的朋友参考一下 JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部: 虽然是strict模式,但语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了。但是alert显示Hello, undefined,说明变量y的值为undefi

  • 本文向大家介绍JavaScript中变量提升与函数提升经典实例分析,包括了JavaScript中变量提升与函数提升经典实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript中变量提升与函数提升。分享给大家供大家参考,具体如下: 从两个实例说起: eg1: eg2: 1、提升 变量和函数声明从它们在代码中出现的位置被提升到了最上面。 注意: 只有声明本身会被提升,而赋值

  • 本文向大家介绍JS原型和原型链原理与用法实例详解,包括了JS原型和原型链原理与用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS原型和原型链原理与用法。分享给大家供大家参考,具体如下: Javascript语言的继承机制一直很难被人理解。 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototy

  • 本文向大家介绍JS严格模式原理与用法实例分析,包括了JS严格模式原理与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS严格模式原理与用法。分享给大家供大家参考,具体如下: 使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是一个字面量表达式,在 JavaScri

  • 本文向大家介绍JS高阶函数原理与用法实例分析,包括了JS高阶函数原理与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS高阶函数原理与用法。分享给大家供大家参考,具体如下: 如果您正在学习JavaScript,那么您必须遇到高阶函数这个术语。这听起来复杂,其实不然。 使JavaScript适合函数式编程的原因是它接受高阶函数。 高阶函数在JavaScript中广泛使用。如果你

  • 本文向大家介绍JS数据双向绑定原理与用法实例分析,包括了JS数据双向绑定原理与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS数据双向绑定原理与用法。分享给大家供大家参考,具体如下: 通常在前端开发过程中,经常遇到需要绑定两个甚至多个元素之间的值,比如将input的值绑定到一个h1上,改变input的值,h1的文字也自动更新。  首先是在界面上更改input的值,需要监听i

  • 本文向大家介绍基于js的变量提升和函数提升(详解),包括了基于js的变量提升和函数提升(详解)的使用技巧和注意事项,需要的朋友参考一下 一、变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。 上个简历的例子如: 之所以会是以上的打印结果,是由于js的变量提升,实际上上面的

  • 本文向大家介绍JS中作用域和变量提升(hoisting)的深入理解,包括了JS中作用域和变量提升(hoisting)的深入理解的使用技巧和注意事项,需要的朋友参考一下 作用域(Scoping) 对于Javascript初学者来说,一个最迷惑的地方就是作用域;事实上,不光是初学者。我就见过一些有经验的javascript程序员,但他们对scope理解不深。javascript作用域之所以迷惑,是因为