uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

理解:let变量的作用域只能在当前函数中

js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net
ef520b839c9e9dcdcbf94692909c1df5.png
全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?​blog.csdn.net
0b53e152a1d554c4d636b63297ab341c.png

早期的JavaScript中,声明变量只能使用var关键字定义变量,并没有定义常量的功能。通过var关键字定义的变量,其作用域只能函数级或是全局作用域,并没有块级作用域ES6(ECMAScript 2015)对这一问题做了改善,增加了用于定义块级变量的let关键字和用于定义常量的const关键字

JavaScript let 和 const

ECMAScript 2015(ECMAScript 6)

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: letconst

let 声明的变量只在 let 命令所在的代码块内有效。

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

在 ES6 之前,JavaScript 只有两种作用域: 全局变量函数内的局部变量

  1. var定义变量
  • 1.1 语法及说明
  • 1.2 使用及特点
  1. let定义块级变量
  • 2.1 语法及说明
  • 2.2 与var的异同
  1. const定义常量

1. var定义变量

1.1 语法及说明

var关键字用于声明一个或多个变量,声明多个变量时使用逗号(,)分隔,声明变量的同时可以对其初始化。

语法法结构如下:

var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
  • varname1…varnameN - 变更名。可以是任何合法的标识符。
  • value1…valueN - 初始化值。可选。可以是任何合法的表达式。

使用var声明变量时,声明的变量作用域是在当前位置的上下文件中:函数的内部(声明在函数内)或者全局(声明在函数外)。

1.2 使用及特点

使用var定义的变量有以下特点:

变量声明提升

无论在代码的任何位置声明变量,执行引擎都会在任何代码执行之前处理。由于这个原因,所以在代码中的任意位置声明变量与在代码开头声明变量是等效的。

这意味着我们可以在定义变量之前使用,这个行为叫做'hoisting',也就是把所有的变量声明移动到函数或者全局代码的开头位置。

hoist = 'http://itbilu.com';
var hoist;// 可以理解为:
var hoist;
hoist = 'http://itbilu.com';

注意:虽然变量声明提升让我们可以先使用再定义变量,但建议总是先定义再使用变量,这样可以让变量的作用域更加清晰。

声明与未声名变量的区别

未声明的变量会被添加一个全局作用域,而声明变量作用域是当前上下文:

function x() {y = 1;   // 在严格模式下会抛出ReferenceErrorvar z = 2;
}
x();console.log(y); // '1'
console.log(z); // ReferenceError: z is not defined

声明变量在任何代码执行前创建,而未声明的变量只有在执行赋值操作的时候才会被创建:

console.log(a);  // 抛出ReferenceError。
console.log('still going...'); // 不会执行
var a;
console.log(a);  // "undefined"或""(不同执行引擎的实现不同)
console.log('still going...'); // 'still going...'

声明变量是不可配置属性,而未声明变量是可配置的:

var a = 1;
b = 2;delete this.a; // 在严格模式下抛出TypeError,非严格模式下执行失败且无任何提示
delete this.b;console.log(a, b); // 抛出ReferenceError,'b'属性已经被删除

以上三点是声明与未声明变量区别,但错误表现是不可预知的。而在严格模型下,使用未赋值的变量会抛出异常,推荐总是先定义(声明)再使用变量。

全局作用域与函数作用域

函数内部声明的变量只能在函数内部使用,函数外部声明的变量可以全局使用:

var x = 0;function f(){var x = 1, y = 1;
}
f();console.log(x); // 0
console.log(y); // ReferenceError: y is not defined

2. let定义块级变量

2.1 语法及说明

let用于定义块级变量,其语法结构类似于var

let varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

var声明的变量是函数级的或者是全局的,而let用于声明块级作用域。

如,使用let声明一个块级变量:

if (x > y) {let gamma = 12.7 + y;i = gamma * x;
}

2.2 与var的异同

letvar的区别主要体现在作用域上,当在子代码块中使用中其声明的是块级变量,而var声明的是全局变量:

var a = 5;
var b = 10;if (a === 5) {let a = 4; // if 块级作用域var b = 1; // 函数级作用域console.log(a);  // 4console.log(b);  // 1
} console.log(a); // 5
console.log(b); // 1

在函数或程序顶层使用时,letvar没有什么区别:

var x = 'global';
let y = 'global';
console.log(this.x);  // 'global' 
console.log(this.y);  // 'global'

3. const定义常量

const用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];

const定义常量与使用let定义变量十分相似:

  • 二者都是块级作用域
  • 都不能和它所在作用域内的其他变量或函数拥有相同的名称

两者还有以下两点区别:

  • const声明的常量必须初始化,而let声明的变量不用
  • 常量的值不能通过再赋值改变,也不能再次声明。而变量值可以修改

通过 const 定义的变量与 let 变量类似,但不能重新赋值:

实例

const PI = 3.141592653589793;
PI = 3.14;      // 会出错
PI = PI + 10;   // 也会出错

块作用域

块作用域内使用 const 声明的变量与 let 变量相似。

在本例中,x 在块中声明,不同于在块之外声明的 x:

实例

var x = 10;
// 此处,x 为 10
{ const x = 6;// 此处,x 为 6
}
// 此处,x 为 10

在声明时赋值
JavaScript const 变量必须在声明时赋值:

不正确
const PI; PI = 3.14159265359; 正确
const PI = 3.14159265359;

不是真正的常数
关键字 const 有一定的误导性。
它没有定义常量值。它定义了对值的常量引用。
因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。

原始值
如果我们将一个原始值赋给常量,我们就不能改变原始值:

实例

const PI = 3.141592653589793; PI = 3.14;      // 会出错 PI = PI + 10;   // 也会出错

常量对象可以更改

您可以更改常量对象的属性:

实例

// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};// 您可以更改属性:
car.color = "White";// 您可以添加属性:
car.owner = "Bill";

但是您无法重新为常量对象赋值:

实例

const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"};    // ERROR

常量数组可以更改

您可以更改常量数组的元素:

实例

// 您可以创建常量数组:
const cars = ["Audi", "BMW", "porsche"];// 您可以更改元素:
cars[0] = "Honda";// 您可以添加元素:
cars.push("Volvo");

但是您无法重新为常量数组赋值:

实例

const cars = ["Audi", "BMW", "porsche"];
cars = ["Honda", "Toyota", "Volvo"];    // ERROR

重新声明

在程序中的任何位置都允许重新声明 JavaScript var 变量:

实例

var x = 2;    //  允许
var x = 3;    //  允许
x = 4;        //  允许

在同一作用域或块中,不允许将已有的var或let变量重新声明或重新赋值给const:

实例

var x = 2;         // 允许
const x = 2;       // 不允许
{let x = 2;     // 允许const x = 2;   // 不允许
}

在同一作用域或块中,为已有的 const 变量重新声明声明或赋值是不允许的:

实例

const x = 2;       // 允许
const x = 3;       // 不允许
x = 3;             // 不允许
var x = 3;         // 不允许
let x = 3;         // 不允许{const x = 2;   // 允许const x = 3;   // 不允许x = 3;         // 不允许var x = 3;     // 不允许let x = 3;     // 不允许
}

在另外的作用域或块中重新声明 const 是允许的:

实例

const x = 2;       // 允许{const x = 3;   // 允许
}{const x = 4;   // 允许
}

提升

通过 var 定义的变量会被提升到顶端。如果您不了解什么是提升(Hoisting),请学习提升这一章。

您可以在声明 var 变量之前就使用它:

实例

carName = "Volvo";    // 您可以在此处使用 carName
var carName;

通过 const 定义的变量不会被提升到顶端。

const 变量不能在声明之前使用:

实例

carName = "Volvo";    // 您不可以在此处使用 carName
const carName = "Volvo";

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言求十个数中最大值

一.代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int arr[] { 1,2,3,4,5,63,7,8,9,11 };int sz sizeof(arr) / sizeof(arr[0]);int max arr[0];int i 0;for (i 1; i < 10; i){if (arr[i] > max)max arr[i];}printf("%d\n&qu…

ubuntu20.04安装timeshift最新方法

总结&#xff1a; 现在可以使用如下代码安装 sudo apt-get update sudo apt-get install timeshift原因&#xff1a; 在尝试Timeshift系统备份与还原中的方法时&#xff0c; sudo apt-add-repository -y ppa:teejee2008/ppa运行失败。 更改为以下代码&#xff1a; sudo a…

js基础练习---面向对象浅理解分析

function createPerson(name,sex,color) //构造函数{var objnew Object();//创建一个空对象obj.namename; obj.sexsex;obj.colorcolor;obj.Shownamefunction(){alert("我的名字是"this.name);};obj.Showsexfunction(){alert("我是"this.sex"的")…

前端一些面试问题3

DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。 DOM操作——怎样添加、移除、移动、复制、创建和查找节点。 1.创建新节点 createDocumentFragment() createElement() createTextNode() 2.添加、移除、替换 appendChild() removeChild() replaceChild(…

SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)

在保密你的服务器和数据&#xff0c;防备当前复杂的攻击&#xff0c;SQL Server有你需要的一切。但在你能有效使用这些安全功能前&#xff0c;你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础&#xff0c;因此你可以对SQL Server里的安全功能充分利用&#xf…

索引超出数组界限是什么意思_从V8源码分析一个JS 数组的内存占用问题

前段时间&#xff0c;在排查一个问题的时候&#xff0c;遇到了一个有点令人困惑的情况&#xff0c;有下面这两段代码&#xff1a;const a new Array(99999); a[99998] undefined;const b new Array(99999); b[99999] undefined;我们通过 node --inspect-brk 来分别运行这两…

浅谈PVID和VID区别

PVID和VID彻底研究&#xff08;上&#xff09;——PVID的作用及和VID的区别Pvid和Vid经常出现于二、三层交换机里&#xff0c;由于PVID和VID的设置不合理&#xff0c;造成VLAN划分变得混乱。本文就对PVID和VID进行了彻底研究。pvid是交换机上的概念,说的是进入该端口的报文如果…

C语言打印九九乘法口诀

一.代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int i 0;int j 0;for (i 1; i < 10; i){for (j 1; j < i; j){printf("%d*%d%-2d", i, j, i * j);}printf("\n");}return 0; }二.运行结果

设计模式系列之十二:单例模式

前言 1.描述 Singleton(单例)是设计模式的一种,为了保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 2.主要特点 1)单例类确保自己只有一个实例(构造函数私有:不被外部实例化,也不被继承)。 2)单例类必须自己创建自己的实例。 3)单例类必须为其他对象提供唯…

python double free_python错误:double free或corruption(out):0x0000000001e4b030

dataset" rel"nofollow noreferrer">Code &sourceubuntu 16.04GNU收音机3.7.12UHD 3.10.1.1数字1.13.1压缩比0.19.1当我用Gnuradio生成一个数据集时&#xff0c;我遇到了这个问题&#xff0c;这些代码在我换另一台计算机之前一直运行良好&#xff0c;我搜…

myeclipse 8.5最新注册码(过期时间到2016年)

转自&#xff1a;http://hi.baidu.com/bagewell/item/c68cd0c4251d661f515058d4 Subscriber:huazai Subscription Code:uLR8ZC-855550-61565856301609203 Subscriber:feifei Subscription Code:sLR8ZC-855550-61565856701742177 Subscriber:kobe …

python 多线程读写文件错误_python多线程老是报错。大神帮忙看看哈?

以下是代码&#xff1a;importthreadingimporttimeproducts[]conditionthreading.Condition()classConsumer(threading.Thread):defconsume(self):globalconditionglobalproductsconditon.acqu...以下是代码&#xff1a;import threadingimport timeproducts[]condition threa…

内向的人很难成为群体程序员吗?

Aaron Griffith是一名来自Hunter Industries的程序员分析师。近日&#xff0c;他在博文“群体编程之于内向的人”中分享了他作为群体编程团队成员的经验。根据高级顾问Woody Zuill&#xff08;敏捷专家\u0026amp;教练&#xff09;的定义&#xff0c;“群体编程&#xff08;Mob …

自动机理论、形式语言和计算导论提纲

我真的是觉得这门课太虚了。。这个总结基于名教材《自动机理论、语言和计算导论》&#xff08;机械工业&#xff09;&#xff0c;也可以说是这本书的总结。由于这门课里很多罗马字母&#xff0c;打字很困难所以能省略的公式都不写了&#xff0c;可以算是入门介绍了。这里省略的…

C语言函数实现交换两个整型变量

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> void Swap(int* pa, int* pb) {int temp 0;temp *pb;*pb *pa;*pa temp; }int main() {int a 20;int b 30;printf("交换前a%d b%d\n", a, b);Swap(&a,&b);printf…

每日英语:Why Sit Up Straight?

Stop for a second and notice the way you are sitting. Back curved, shoulders slumped, maybe legs crossed? For people who spend the day staring at a computer screen, this position is fairly typical. But what is it doing to your spine, if anything? Do we n…

python如何跳出外层循环_失去循环标签的Python,我这样实现跳出外层循环

不完美的Python自从各类Python大火&#xff0c;感觉天上地下哪儿都有Python的一席之地&#xff0c;Python功夫好啊…但python有些细节上缺少其他语言的便利。今天我们就来举几个例子。跳出外层循环大家都知道&#xff0c;在Java中存在标签的概念&#xff0c;当我们存在多层循环…

Spring装配Bean的过程

首先说一个概念&#xff1a;“懒加载” 懒加载&#xff1a;就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去&#xff0c;而是在当需要用的时候&#xff0c;才把这个对象实例化到容器中。 spring配置文件中bean默认是lazy-init“false”为非懒加载。下面…

Oracle 中间件云服务器系统 ExaLogic X2 - 2 和 T3-1B概述

甲骨文公司宣布推出Oracle中间件云服务器 T3-1B&#xff0c;该新模式可为Oracle 中间件云服务器的集成系统提供SPARC Solaris服务器业界领先的性能、扩展性和可用性。 旨在为大型和关键任务部署而设计&#xff0c;Oracle 中间件云服务器是一个由甲骨文测试和调试而专门设计的软…

几个常用的Linux操作系统监控脚本

为大家提供五个常用Linux监控脚本(查看主机网卡流量、系统状况监控、监控主机的磁盘空间,当使用空间超过90&#xff05;就通过发mail来发警告、监控CPU和内存的使用情况、全方位监控主机)&#xff0c;有需要的朋友不妨看看哦 1、查看主机网卡流量 #!/bin/bash#network#Mike.Xuw…