0

0

javascript声明变量的4种方法是什么

青灯夜游

青灯夜游

发布时间:2021-04-01 17:40:34

|

14392人浏览过

|

来源于php中文网

原创

javascript声明变量的4种方法:1、使用“var”声明变量,例“var a;”;2、使用“function”声明变量,例“function Fun (num) {}”;3、使用“let”声明变量;4、使用“const”声明变量。

javascript声明变量的4种方法是什么

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

声明变量的方式

JavaScript 变量声明的方式有下面几种:

  • ES6之前是 var 和 function
  • ES6中新增 let 和 const

function 是一种声明变量的方式?

我们来验证一下

验证方法一:

立即学习Java免费学习笔记(深入)”;

    function repeatFun (num) {
      return num;
    }

    repeatFun(10); // 10

    var repeatFun = 1;

    repeatFun(2); // Uncaught TypeError: repeatFun is not a function

这种方法是利用 var可以重复声明变量,但是会后者覆盖会覆盖前者的特点 

我们来看看这里发生来什么事:

  • 首先是声明了一个函数,他的名字是 repeatFun
  • 紧接调用一次,得到结果为10
  • 之后用 var 又声明了一次 repeatFun , 并初始化为 1
  • 最后调用一次 repeatFun 这个函数
  • 结果就是报错 ,内容: repeatFun 不是一个函数

根据执行结果我们可以推断出在浏览器的内存中存在一个 repeatFun 变量,之前是一个函数,后来被一个 var 关键字重新声明并初识化为 1。

验证方法二:

    {
      let repeatFun = 1;
      function repeatFun (num) {
        return num
      }
    }
    // Uncaught SyntaxError: Identifier 'repeatFun' has already been declared

第二种方法我是利用 

ES6的一个语法:利用 let 不能重复声明的特性来证明 function 也是一种声明变量的方式


var ,let , const 的不同点:

  • 变量声明提升

    • var 有变量声明提升的功能,可以先使用然后再声明,反之也成立
    • let 和 const 则没有变量声明提升的功能,必须要先声明才能使用
  • 重复声明

    • var 能重复声明,后者覆盖前者
    • let 和 const 则不能重复声明
  • 作用域的范围

    • var 的作用域是以函数为界限
    • let 和 const 是块作用域
    • var 可以定义全局变量和局部变量,let 和 const 只能定义局部变量
  • const 的特殊之处

    • 声明之后不能被修改(引用类型和基本类型的表现有些地方不一样)

变量声明提升

  • var 是有变量声明提升的功能,可以先使用然后再声明
  • let 和 const 则没有变量声明提升的功能,必须要先声明才能使用

例子一,验证 var 变量提升:

var b = a + 1; // b: NaN 
var a = 1; // a: 1

首先是先声明来一个变量 b 并进行初识化,初始化的值为 a + 1(a 的值是多少?)
然后紧接是声明了一个变量 a ,初识化为 1
这是代码表面上就是做着这些事,实际上做的事情是这样:

  • 在每次声明一个变量的时候,他们的声明都是放在代码的最上面,并且他们都是要进行一次初始化,值为:undefined,但是赋值的位置是不会改变,
  • 然后再进行其他的操作

下面写法同样可以实现一样的效果

var b;
var a;

b = a +1; // b: NaN 
a = 1; // a: 1

let 和 const 则与 var 的表现则不同

例子二,验证 let 是否存在变量提升:

Insou AI
Insou AI

Insou AI 是一款强大的人工智能助手,旨在帮助你轻松创建引人入胜的内容和令人印象深刻的演示。

下载
let b = a + 1; // Uncaught ReferenceError: a is not defined
let a = 1;

在运行的时候直接抛出范围错误,若这样改一下,就没有错误:

let a = 1; // a: 1
let b = a + 1; // b: 2

const 和 let在变量提升方面的表现是一致


重复声明

  • var 能重复声明,后者覆盖前者
  • let 和 const 则不能重复声明

    例子一,验证 var 的重复声明:

    var a = 1;
    var a = 2;
    var b = a + 1; // 3
    • 首先是声明变量 a ,初始化为1
    • 紧接再次声明变量 a, 初始化为2
    • 最后声明变量 b , 它初始化值是 a + 1

    例子二,验证 let 的重复声明:

    let a = 1;
    let a = 2; // Uncaught SyntaxError: Identifier 'a' has already been declared
    var a = 1;
    let a = 2; //Uncaught SyntaxError: Identifier 'a' has already been declared
    • 很显然在同一个执行环境中使用 let 进行声明的变量是不能重复声明,否则会抛出错误
      const 和 let 在重复声明方面的表现是一致

作用域的范围

  • var 的作用域是以函数为界限
  • let 和 const 是块作用域
  • var 可以定义全局变量和局部变量,let 和 const 只能定义局部变量

封装一个阶乘函数来举例,没有使用尾递归,就是使用 for 和 if 的搭配实现
例子一,阶乘函数验证作用域域范围:

  var num = 5;

  function factorial(num) {

      var result = 1,resultValue = 0;

      for (let i = num - 1; i >= 1; i--) {

        if (i === num - 1) {
          resultValue = num * i;
        }else{
          resultValue = num * i / num;
        }

        result *= resultValue;
      }

      // i 是用 let 进行定义它的作用域仅仅被限制在 for 循环的区域内
      // i++;// Uncaught ReferenceError: i is not defined

      return result;
  }

  // result 是用 var 进行定义,他的活动区域在 factorial 函数内
  // result++; // var的作用域.html:34 Uncaught ReferenceError: result is not defined

  factorial(num); // 120

const 和 let 在作用域的范围的表现也是一样 

例子二,验证 const 的作用域:

  {
    const NUM_1 = 10;
  }

  let b = NUM_1 + 1;  // Uncaught ReferenceError: NUM_1 is not defined

例子三,验证 var 可以定义全局变量,let 和 const 只能定义局部变量

  // 可以挂载到全局作用域上
  // var name = 'window scoped';

  let name = 'let scoped'; //是不挂载到全局作用域中

  let obj = {
    name: 'myName',
    sayName () {

       return function () {
        console.log(this.name); // 打印出来为空
      };
    }
  }

  obj.sayName()();
  console.log(window); //name 这个属性的值没有,如下图

这里写图片描述

若这样改一下就可以得到我们想要的值:

  • 把用 var 定义的 name 的代码取消注释,把用 let 定义的 name 的代码注释。

这个同时也涉及到新问题 this 的指向。后面的文章再详细举例验证


const 的特殊之处

const 与 let , var 其实还是有些地方不一样的

例子1:验证 const 的特殊之处(一)<br>

const NUM = 100; 
 NUM = 1000; // Uncaught TypeError: Assignment to constant variable
  • 经过 const 方式进行声明,之后赋值完毕,则不可以进行改变,否则会报错

但是也有例外 

例子二:验证 const 的特殊之处(二)

  const obj = {
    name: 'xiaoMing',
    sayName () {
      return this.name
    }
  };
  obj.sayName(); // xiaoMing

  obj.name = 'xiaoHong';
  obj.sayName(); // xiaoHong
  • 使用 const 首先声明一个变量 obj , 并且这个变量指向我们在内存中创建的对象,你会发现我们改变里面的属性是没有任何问题

若这样改一下:
例子三:验证 const 的特殊之处(三)

  const obj = {
    name:'xiaoMing',
    sayName(){
      return this.name
    }
  };

  obj = {}; // Uncaught TypeError: Assignment to constant variable
  • 若改变该变量的指向的对象,则就会报错。这种错误和 「 验证 const 的特殊之处(一)」的错误是一样的

更多编程相关知识,请访问:编程视频!!

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

233

2025.12.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

564

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

97

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

106

2025.09.18

python如何计算数的阶乘
python如何计算数的阶乘

方法:1、使用循环;2、使用递归;3、使用math模块;4、使用reduce函数。更多详细python如何计算数的阶乘的内容,可以阅读下面的文章。

177

2023.11.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号