广告
返回顶部
首页 > 资讯 > 精选 >javascript声明变量用哪个关键字
  • 951
分享到

javascript声明变量用哪个关键字

2023-06-15 10:06:56 951人浏览 泡泡鱼
摘要

javascript声明变量用哪个关键字?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在js中,可以使用var、let和const关键字声明。var声明的变量可

javascript声明变量用哪个关键字?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

js中,可以使用var、let和const关键字声明。var声明的变量可以用来保存任何类型的值,范围是函数作用域;let声明的变量在{}中使用,变量的作用域限制在块级域中;const用于修饰常量,声明位置不限。

声明变量关键字var、let和const

ECMAScript变量是松散类型的,即变量可以用于保存任何类型的数据,每个变量只不过是一个用于保存任意值的命名占位符。

1.var关键字

  var声明的变量可以用来保存任何类型的值(在不初始化的情况下会保存一个特殊值undefined),像其他语言一样在javascript在定义变量的同时还可以对变量进行赋值,该变量被定义为一个保存所赋值的值的变量,因为javascript是动态语言,在初始化变量的时候不会将它标识为所赋值的数据类型,只是一个简单的赋值而已。随后不仅可以改变保存的值,还可以改变值的类型:

var message = "hi";message = 100;

1.1.var声明作用域

  使用var操作符定义的变量会成为包含它的函数的局部变量。比如,使用var在函数内部定义一个变量,就意味这该变量将在函数退出时被销毁,我觉得这就是所说的垃圾回收:

function test( ) {vart message = "hi";//局部变量}test( );console.log(message);//报错!

  函数调用之后变量会随机被销毁,因此最后一行会报错。不过,在函数定义变量时省略var操作符时可以创建一个全局变量:

function test( )  {message = "hi";//全局变量}test( );console.log(message);//"hi"

  只要调用一次函数test( )就会定义message这一全局变量,并且可以在函数外部访问。但是由于在局部作用域中定义的全局变量很难维护,所以一般不推荐这样做。

1.2.var声明提升

  使用var关键字声明的变量会自动提升函数作用域顶部,即所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部:

function fool( ) {console.log(age);var age = 28;}fool( );//undefined

  这里是不会报错的,而是显示undefined,ECMAScript在运行是会把它看成等价于如下的代码:

function fool( ) {var age;console.log(age);age = 28;}fool( );//undefined

2.let声明

  let跟var的作用差不多,但有着非常重要的区别。最明显的区别是let声明的范围是块作用域,而var声明的范围是函数作用域:

if (true) {let age = 26;console.log(age);//26}console.log(age);//ReferceError:age没有定义

  age变量的作用域仅限于该块内部,所以不能在if块外部被引用。块作用域是函数作用域的子集,所以适用于var的作用域限制也同样适用于let。

  let也不允许同一块作用域中出现冗余声明(var可以):

var name;var name;let age;let age;//SyntaxError;标识符age已经声明过了

  此外,对声明冗余报错不会因混用var和let而受影响。这两个关键字声明的并不是不同类型的变量,他们只是指出变量在相关作用域如何存在。

2.1.暂时性死区

  let与var的另一个重要区别是let声明的变量不会在作用域中被提升:

//name会提升console.log(name);//undefinedvar name = 'matt';//name不会提升console.log(name);//ReferenceError:name没有定义let name = 'matt';

2.2.全局声明

  与var不同,使用let在全局作用域中声明的变量不会成为window对象的属性(var声明的变量则会):

var name = 'matt';console.log(window.name);//'matt'let name = 'matt';console.log(window.name);//undefined

  不过,let声明仍然是在全局作用域中发生的,相应变量会在页面的声明周期内存续。

2.3.条件声明

  let的作用域是块,所以不可能检查前面是否已经使用let声明过同名变量,同时也就不可能在没有声明的情况下声明它。使用try/catch或typeof操作符也不能解决,因为条件块中let声明的作用域仅限于该块。为此,对于let这个新的es6声明关键字不能依赖条件声明模式。

2.4.for循环中的let声明

  在使用var的时候,最常见的问题就是对迭代变量的奇特声明和修改:

for(var i = 0; i < 5; ++i) {setTimeout( () => console.log(i) ,0)}//你可能以为会输出0、1、2、3、4//实际上输出的是5、5、5、5、5

  在退出循环的时候迭代变量保存的是导致循环退出的值:5。在之后执行setTimeout超时逻辑时,所以i都是同一个变量,因而最终输出的都是同一个值。

  使用let声明迭代变量时,JavaScript引擎在后台会为每个迭代循环声明一个新的迭代变量,每个setTimeout引用的都是不同的变量实例:

for(let i = 0; i < 5; ++i) {setTimeout( () => console.log(i) ,0)}//会输出0、1、2、3、4

3.const声明

  const的行为与let基本相同,唯一一个重要区别是它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行错误。

  const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制:

const person = { };person.name = 'matt';

4.使用建议

let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。

4.1.不使用var

  限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。

4.2.const优先,let次之

  使用const声明可以让浏览器运行时强制保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。因此,我们应该优先使用const来声明变量,只有在提前知道未来会有修改时再使用let。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: javascript声明变量用哪个关键字

本文链接: https://www.lsjlt.com/news/279732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javascript声明变量用哪个关键字
    javascript声明变量用哪个关键字?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在js中,可以使用var、let和const关键字声明。var声明的变量可...
    99+
    2023-06-15
  • javascript中用哪个关键字声明变量
    这期内容当中小编将会给大家带来有关javascript中用哪个关键字声明变量,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。javascript中声明变量的关键字是var、let和const。var声明的变...
    99+
    2023-06-15
  • es6中怎么用关键字import声明变量
    小编给大家分享一下es6中怎么用关键字import声明变量,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用关键字import声明...
    99+
    2022-10-19
  • es6中怎么用关键字class声明变量
    小编给大家分享一下es6中怎么用关键字class声明变量,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用关键字class声明变量...
    99+
    2022-10-19
  • es6中怎么用关键字let声明变量
    小编给大家分享一下es6中怎么用关键字let声明变量,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用关键字let声明变量let&...
    99+
    2022-10-19
  • es6中怎么用关键字const声明变量
    这篇文章主要为大家展示了“es6中怎么用关键字const声明变量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“es6中怎么用关键字const声明变量”这篇文章吧...
    99+
    2022-10-19
  • es6中怎么用关键字function声明变量
    这篇文章主要介绍了es6中怎么用关键字function声明变量,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用关键字function声明变量...
    99+
    2022-10-19
  • es6中怎么用关键字var声明变量
    这篇文章将为大家详细讲解有关es6中怎么用关键字var声明变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用关键字var声明变量var a ;  /...
    99+
    2022-10-19
  • C语言关键字及变量怎么定义与声明
    这篇“C语言关键字及变量怎么定义与声明”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言关键字及变量怎么定义与声明”文章吧...
    99+
    2023-07-02
  • javascript声明变量的方法有哪些
    这篇文章将为大家详细讲解有关javascript声明变量的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript声明变量的4种方法:1、使用“var”声明变量,例“var a;”;2...
    99+
    2023-06-14
  • JavaScript如何使用const声明变量
    这篇文章主要介绍JavaScript如何使用const声明变量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用const声明变量使用 var 和 let 声明的变量在脚本代码的运行...
    99+
    2022-10-19
  • JavaScript如何使用let声明变量
    这篇文章将为大家详细讲解有关JavaScript如何使用let声明变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用let声明变量使用 let 可以声明块级别作用域的...
    99+
    2022-10-19
  • javascript声明变量不用var的方法有哪些
    本篇内容主要讲解“javascript声明变量不用var的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript声明变量不用var的方法有...
    99+
    2022-10-19
  • javascript变量声明是否必须用var
    这篇文章将为大家详细讲解有关javascript变量声明是否必须用var,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript中,变量声明不是必须用var,还...
    99+
    2022-10-19
  • javascript中使用let声明变量的优势有哪些
    这篇文章主要介绍了javascript中使用let声明变量的优势有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript中使用let声明变量的优势有哪些文章都会...
    99+
    2022-10-19
  • JavaScript变量能在声明之前使用吗
    这篇文章主要介绍了JavaScript变量能在声明之前使用吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript变量能在声明之前使用吗文章都会有所收获,下面我们一...
    99+
    2022-10-19
  • Python使用什么关键字声明匿名函数
    在Python中一般使用lambda对匿名函数进行声明,具体方法如下:lambda语法:lambda x:x*x #lambda关键字表示匿名函数,冒号前边x表示传递的参数,后边是返回的结果。lambda使用方法:li = [1,2,3]n...
    99+
    2022-10-23
  • JavaScript块作用域、重新声明变量的方法
    这篇文章主要介绍了JavaScript块作用域、重新声明变量的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript块作用域、重新声明变量的方法文章都会有所收获...
    99+
    2022-10-19
  • JavaScript中const声明变量哪些类型可以被更改
    这篇文章给大家分享的是有关JavaScript中const声明变量哪些类型可以被更改的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。const 声明变量哪些类型可以被更改如果值不想被改变时,可以使用 const:c...
    99+
    2023-06-27
  • javascript使用var声明变量的问题怎么解决
    这篇文章主要介绍了javascript使用var声明变量的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript使用var声明变量的问题怎么解决文章都会...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作