1. let与var:
①. let定义变量、const定义常量:
a. const定义常量值不能修改,但是对象里面的属性是可以修改的.
②. 在同作用域中不能重复定义:
a. js的作用域(scope)只有全局和局部.
b. var可以后面覆盖前面的变量.
③. 块级作服务器托管网用域生效:
a. let支持块级作用域,花括号就能为它创建新的作用域.
④. 不存在变量提升:
⑤. 区别:
a. es5声明变量只有2种方式:var和function.
b. es6声明变量有let、const、import、class,再加上es5的var、function,一共6种.
c. 浏览器顶层对象是window,Node顶层对象是Global.
d. 全局变量:
(1). es5的顶层对象等价于全局变量.
(2). es6中:
1. var、function声明的全局变量,仍然属于顶级对象的属性.
2. let、const、class声明的全局变量不再属于顶层对象的属性.
3. 说明es6开始,全局变量和顶层对象的属性开始分离、脱钩.
(1). var提升在哪里去了?
①. var声明的全局变量:
a. 会被绑定到Window对象.
②. let/const声明的全局变量:
a. 会被绑定到Script对象,而不是Window对象(不能以Window.xx的形式使用).
③. var/let/const声明的局部变量,都会被绑定到Local对象.
④. Script对象、Window对象、Local对象三者是平行并列关系.
(2). 验证:
①. let num = 1
console.log(this.num) // undefined
console.log(this) // Window对象中没有num属性
var num2 = 2
console.lo服务器托管网g(this.num2) // 2
console.log(this) // Window有num2属性
②. 如图1:
let aaa = 111; // Script
const aab = 111; // Script
var aac = 111; // Window,即Global
function fn() {
let aad = 111; // Local
const aae = 111; // Local
var aaf = 111; // Local
debugger
}
fn();
③. 如图2:
let aaa = 111; // Script
const aab = 111; // Script
var aac = 111; // Window
let obj = {
uu: function() {
let aag = 111;
const aah = 111;
var aai = 111;
debugger
}
}
obj.uu()
④. 两张图可以看出,局部变量被绑定到Local对象上,与调用者即this指向无关.
(3). 验证2:
let aaa = 111; // Script
const aab = 111; // Script
var aac = 111; // Window,即Global
function fn() {
let aad = 111; // Local
const aae = 111; // Local
var aaf = 111; // Local
}
console.dir(fn)
①. 作用域链[[Scopes]]数组有两个值:Script、Global.
②. Script保存let、const定义的全局变量aaa、aab,跟window不一样.
③. Global保存了var定义的全局变量aac.
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
在了解音频声学的最开始,首先要知道的最基础的一个问题是: 什么是声音?人为什么可以听到声音? 声音是由于物体的振动通过介质传播并能被人的听觉器官所感知的波动现象。 人能够听到声音是因为物体在振动时,周围的空气分子随着振动而产生疏密变化,形成疏密波,也就是声波。…