uniapp获取到js⽂件var⼀个变量怎么获取到这个变量值_浅析
Js中const,let。。。
理解:let变量的作⽤域只能在当前函数中
js中const,let,var的区别及作⽤域_lianzhang861的博客-CSDN博客b log.csdn
全局作⽤域中,⽤ const 和 let 声明的变量不在 window 上,那到底在哪⾥?如何去获取?b log.csdn
早期的JavaScript中,声明变量只能使⽤var关键字定义变量,并没有定义常量的功能。通过var关键字定义的变量,其作⽤域只能函数级或是全局作⽤域,并没有块级作⽤域ES6(ECMAScript 2015)对这⼀问题做了改善,增加了⽤于定义块级变量的let关键字和⽤于定义常量的const关键字
JavaScript let 和 const
ECMAScript 2015(ECMAScript 6)
const。
let 和 const
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let
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 = 'itbilu';
var hoist;
// 可以理解为:
var hoist;
hoist = 'itbilu';
注意:虽然变量声明提升让我们可以先使⽤再定义变量,但建议总是先定义再使⽤变量,这样可以让变量的作⽤域更加清晰。
声明与未声名变量的区别
未声明的变量会被添加⼀个全局作⽤域,⽽声明变量作⽤域是当前上下⽂:
function x() {
y = 1; // 在严格模式下会抛出ReferenceError
var z = 2;
}
x();
console.log(y); // '1'
console.log(z); // ReferenceError: z is not defined
声明变量在任何代码执⾏前创建,⽽未声明的变量只有在执⾏赋值操作的时候才会被创建:
console.log(a); // 抛出ReferenceError。
console.log(''); // 不会执⾏
var a;
console.log(a); // "undefined"或""(不同执⾏引擎的实现不同)
console.log(''); // ''
声明变量是不可配置属性,⽽未声明变量是可配置的:
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的异同
let与var的区别主要体现在作⽤域上,当在⼦代码块中使⽤中其声明的是块级变量,⽽var声明的是全局变量:
var a = 5;
var b = 10;
if (a === 5) {
let a = 4; // if 块级作⽤域
var b = 1; // 函数级作⽤域
console.log(a); // 4
console.log(b); // 1
}
console.log(a); // 5
console.log(b); // 1
在函数或程序顶层使⽤时,let与var没有什么区别:
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的作用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.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 变量:
实例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论