开发者社区> 问答> 正文

JavaScript变量及作用域

变量就是对底层数据的引用,并不是数据本身;比如:一个人叫张三,张三只是他的名字,并不是他这个人本身。
java script中的变量分为三种:let(块级变量)、var(函数级变量)、const(常量,块级引用不可变)

一、let和var

let作用于块级,var作用于函数级

1.let

let声明的变量作用于块级,如下代码,能够正常输出


  
  • function abc(){
  • let name = "猿分享";
  • console.log(name);
  • }
  • abc();

将代码改成


  
  • function abc(){
  • {
  • let name = "猿分享";
  • }
  • console.log(name);
  • }
  • abc();

就会报错说name is not defined

2.var

var是函数级变量,作用于整个函数


  
  • function abc(){
  • {
  • let name = "猿分享";
  • }
  • console.log(name);
  • }
  • abc();

将之前这段代码改成如下


  
  • function abc(){
  • {
  • var name = "猿分享";
  • }
  • console.log(name);
  • }
  • abc();

可以正常输出,说明var声明的变量作用于整个函数

3.变量提升问题

var声明的变量会提升到函数顶部,而let声明的变量不会提升
如下代码


  
  • function abc(){
  • {
  • var name = "猿分享";
  • }
  • console.log(name);
  • }
  • abc();

在程序内部就相当于这样,所以在上面用var声明的变量可以正常输出


  
  • function abc(){
  • var name;
  • {
  • name = "猿分享";
  • }
  • console.log(name);
  • }
  • abc();

let声明的变量不会这样提升

二、const和let

const的作用域和let一样都是作用域块级,也不存在变量提升,但是const声明的相当于常量,它声明后引用是不可变的。
比如先声明name为abc,然后改成def


  
  • const name = "abc";
  • name = "def";
  • console.log(name);

这样就会报错Assignment to constant variable.,这里改变了引用。
如下例子


  
  • const user = {
  • name: "张三",
  • age: 18
  • }
  • user.sex = "男";
  • console.log(user);

可以正常输出,这里只是改变了值,并没有改变引用。

展开
收起
chenchuan 2018-08-31 22:54:54 2098 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载