首先要理解js中作用域的概念

作用域:指的是一个变量的作用范围

1.全局作用域

直接写在script中的js代码,在js中,万物皆对象,都在全局作用域,全局作用域在页面打开时创建,在全局作用域中有一个全局对象window,它代表是一个浏览器的窗口

它由浏览器创建可以直接使用,在全局作用域中,创建的对象都可以都可以作为window对象的属性保存,在任何地方都可以调用

2.函数作用域

调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁,每调用一次函数会创建一个新的函数作用域他们之间是相互独立的,函数中可以访问到全局作用域的变量,反之不行。当在函数作用域中操作对象,如果有,则使用,如果没有则向其上一个作用域(不是指的是全局作用域)找,直到找到全局作用域无论在那个作用域,都有变量声明提前现象,在函数中不用var声明的变量都会设置为全局变量,形参相当于在函数作用域里声明变量

var定义的变量可被更改,如果不初始化而直接使用也不会报错,var声明的变量会得到提升,其余两个不存在这种情况,即必须先声明再赋值

let定义的变量和var类似,但作用域在当前声明的范围内

const定义的变量只可初始化一次且作用域内不可被更改,使用前必须初始化

js和其他语言一样,都要经历编译和执行阶段。而js在编译阶段的时候,会搜集所有的变量声明并且提前声明变量,而不会改变其他语句的顺序,因此,在编译阶段的时候,第一步就已经执行了,而第二步则是在执行阶段执行到该语句的时候才执行

var即可用于函数外,亦可用于函数内,这就涉及到全局变量与局部变量的问题,

全局变量如何声明:

在函数外声明的变量就是全局变量,反之,在函数内声明的变量就是局部变量,

作用域:全局变量无论在函数内,还是函数外,都可访问到;

局部变量只能在函数内有效,函数外部访问不到该变量及说对应的变量值

let作用域:只在let命令所在的代码块内({})有效

const
1、const声明一个只读的常量。一旦声明,常量的值就不能改变。

const PI = 3.1415;
PI=3;//VM33690:1 Uncaught TypeError: Assignment to constant variable.

2、const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

const foo;//VM35236:1 Uncaught SyntaxError: Missing initializer in const declaration

3、const的作用域与let命令相同:只在声明所在的块级作用域内有效。

区别:
1、var可以先使用,后声明;let必须先声明后使用。

2、暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域, 不再受外部的影响。
3、var是允许在相同作用域内重复声明同一个变量的,而let与const不允许这一现象。

深度理解js中var let const 区别的更多相关文章

  1. 浅谈JS中 var let const 变量声明

    浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...

  2. 【前端开发】】js中var写和不写的区别

    js中var用与不用的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. v ...

  3. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  4. 如何理解js中的this和实际应用中需要避开哪些坑

    this是什么 this就是函数内部的关键字 看下面例子理解js中的this // 例子1 function fnOne () { console.log(this) } 'use strict' f ...

  5. 深入理解JS中的对象(二):new 的工作原理

    目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...

  6. 深入理解Js中的this

    深入理解Js中的this JavaScript作用域为静态作用域static scope,但是在Js中的this却是一个例外,this的指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及 ...

  7. let、var、const区别(表格比较)

    let.var.const区别(表格比较): 区别项 let var const 作用域 块级作用域 全局作用域或函数作用域 块级作用域 是否有变量提升 无 有 无 是否可重复声明 不可 可以 不可 ...

  8. 如何更好的理解js中的this,分享2段有意思的代码

    关于js中this的浅析,大家可以点击[彻底理解js中this的指向,不必硬背]这篇博客了解. 今天遇到2段比较有意思的代码. ----------------第一段----------------- ...

  9. 图文结合深入理解 JS 中的 this 值

    图文结合深入理解 JS 中的 this 值 在 JS 中最常见的莫过于函数了,在函数(方法)中 this 的出现频率特别高,那么 this 到底是什么呢,今天就和大家一起学习总结一下 JS 中的 th ...

随机推荐

  1. syx学习笔记

    SYX复活了,在悲痛之际,希望能让自己获得更多的知识,更有进步,所以留此博客 数学 推荐blog: 1 2 原根表 FFT(快速傅里叶变换) 2019/12/05 √ 博客 blog 题目 Q1 NT ...

  2. Django(十五)模板详解:模板标签、过滤器、模板注释、模板继承、html转义

    一.模板的基础配置及使用 [参考]https://docs.djangoproject.com/zh-hans/3.0/topics/templates/ 作为Web框架,Django提供了模板,用于 ...

  3. tensorflow实现线性模型和sklearn的线性模型比较

    自己用tensorflow实现了linear模型,但是和sklearn提供的模型效果相比,实验结果差了很多,所以尝试了修改优化算法,正则化,损失函数和归一化,记录尝试的所有过程和自己的实验心得. im ...

  4. 我的Python学习笔记之文件操作

    一,Python的文件类型有两种 1.文本文件 2.二进制文件 文件的操作: 1.打开文件,获取文件的控制权 2.读写文件 3.关闭文件,释放文件的控制权,如果不释放控制权,那么其他程序就不能访问此文 ...

  5. Kubernetes——命令行操作

    如果集群初始化失败需要的操作: master:  kubeadm reset   #回答y  执行一条它提示给你的iptables命令即可 node:  systemctl stop kubelet  ...

  6. 【LeetCode】字符串中的第一个唯一字符

    [问题]给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. s = "leetcode" 返回 . s = "loveleetcode ...

  7. R 《回归分析与线性统计模型》page120,4.3

    #P120习题4.3 rm(list = ls()) A = read.xlsx("xiti_4.xlsx",sheet = 3) names(A) = c("ord&q ...

  8. windows上通过自定义后缀文件启动Unity应用

    好吧,一个Unity应用并不常见的需求.. 两个步骤 1.关联注册表 2.把自定义后缀文件作为启动参数传给Unity做处理 1.关联注册表  (.XXXX是自定义后缀) Windows Registr ...

  9. 4 —— node —— 启动一个 http 服务器

    const http = require('http'); const server = http.createServer(); // 绑定客户端请求事件 // on => 绑定事件 // r ...

  10. 修改tomcat的字符集问题

    转 默认情况下,tomcat使用的是iso8859-1的编码编码方式,浏览器的embed标签中src指向的地址要通过tomcat去解析.如果包含中文,采用这种编码方式就会出现乱码问题,而在这种情况下, ...