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

浅谈JavaScript中变量和函数声明的提升

宗政洋
2023-03-14
本文向大家介绍浅谈JavaScript中变量和函数声明的提升,包括了浅谈JavaScript中变量和函数声明的提升的使用技巧和注意事项,需要的朋友参考一下

现象:

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

2. 函数的提升高于变量的提升。

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

4. 匿名函数不会提升。

5. 不同<script>块中的函数互不影响。

例子:

函数声明提升高于变量声明

//同时声明变量a和函数a
var a;
function a() {} 
alert(typeof a); //显示的是"function",初步证明function的优先级高于var。

//先声明函数后声明变量,证明上边的例子不是function覆盖了变量
function a() {}
var a; 
alert(typeof a); //显示的仍是"function",而不是"undefined",即function的优先级高于var。

//声明了变量的同时赋值
function a() {}
var a = 1;
alert(typeof a); //number,此时不是function了。
//说明:"var a=1"相当于"var a;a=1",即先声明,后赋值,"a=1"相当于把a重新赋值了,自然就是number!

函数内部用var定义了和外部相同的变量,函数将不再向上找外部的变量

var value = 'hello';
function show() {
  alert(value);
  if (!value) {
    var value = 'function';
  }
  alert(value);
}
show() //此处调用函数依次弹出 "undefined", "function"

//上例相当于var value = 'hello';
function show() {
  var value; //注意这行
  alert(value);
  if (!value) {
    value = 'function'; //这行去掉var
  }
  alert(value);
}
show()//1.如果上列中show内部定义value未用var,则会用到外部的变量,弹出"hello", "hello"。 
//2.如果函数内部未定义value,也能获取到外部的value值。

匿名函数不会向上提升

getName()
var getName = function () {
  alert('closule')
}
function getName() {
  alert('function')
}
getName()

//上边的代码相当于
function getName() { //函数向上提升
  alert('function')
}
getName()
var getName = function () {
  alert('closule')
}
getName()

//代码执行分别弹出 "function", "closule"

不同<script>块中的函数互不影响

<script>
  getName()
  var getName = function () {
    alert('closule')
  }
<script>
<script>
  function getName() {
    alert('function')
  }
<script>

//代码执行报错:TypeError: getName is not a function
//因为第一个<script>块中getName()函数未定义,匿名函数又不会向上提升

以上这篇浅谈JavaScript中变量和函数声明的提升就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍举例子说明javascript的变量声明提升和函数声明提升相关面试题,主要包含被问及举例子说明javascript的变量声明提升和函数声明提升时的应答技巧和注意事项,需要的朋友参考一下 先声明函数名,再声明 var 变量名,然后按顺序从上到下赋值。

  • 本文向大家介绍浅析JavaScript声明变量,包括了浅析JavaScript声明变量的使用技巧和注意事项,需要的朋友参考一下 JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用域是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量。 定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指

  • 本文向大家介绍JavaScript中提前声明变量或函数例子,包括了JavaScript中提前声明变量或函数例子的使用技巧和注意事项,需要的朋友参考一下 如题所示,看下面的示例。 (可以使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发者工具,进入控制台console输入) (使用技巧: 控制台输入时Shift+Enter可以中途代码换行) 执行时的截图如下所示: 解释如下: 在Jav

  • 本文向大家介绍JavaScript中Hoisting详解 (变量提升与函数声明提升),包括了JavaScript中Hoisting详解 (变量提升与函数声明提升)的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家介绍了关于JavaScript中Hoisting(变量提升与函数声明提升)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 如何将 函数声明 / 变量 “

  • 本文向大家介绍浅谈JavaScript中定义变量时有无var声明的区别,包括了浅谈JavaScript中定义变量时有无var声明的区别的使用技巧和注意事项,需要的朋友参考一下 前段时间回答了一个关于定义变量时使用关键字var与否的区别,总结回顾一下。 1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量。 使用var定义: 不使用var定义: 2.在全局作用域下,使用v

  • 本文向大家介绍浅析javascript中函数声明和函数表达式的区别,包括了浅析javascript中函数声明和函数表达式的区别的使用技巧和注意事项,需要的朋友参考一下 javascript中声明函数的方法有两种:函数声明式和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数

  • 本文向大家介绍详解javascript中的变量提升和函数提升,包括了详解javascript中的变量提升和函数提升的使用技巧和注意事项,需要的朋友参考一下 1在js中只有两种作用域 a:全局作用域 b:函数作用域 在ES6之前,js是没有块级作用域。 首先来解释一下什么是没有块级作用域? 所以此时 是可以打印输出变量a的值。 2:什么是变量提升? 在我们的js中,代码的执行时分两步走的,1、解析

  • 本文向大家介绍JavaScript变量声明var,let.const及区别浅析,包括了JavaScript变量声明var,let.const及区别浅析的使用技巧和注意事项,需要的朋友参考一下 var声明变量的作用域限制在其声明位置的上下文中 let 声明的变量只在其声明的块或子块中可用,var的作用域是整个封闭函数 在 ECMAScript 2015 中,let绑定不受变量提升的约束,这意味着le