基本类型值有:undefined,NUll,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,他们的值保存在栈空间,我们通过按值来访问的。
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。
如果赋值的是引用类型的值,则必须在堆内存中为这个值分配空间。由于这种值的大小不固定(对象有很多属性和方法),因此不能把他们保存到栈内存中。但内存地址大小是固定的,因此可以将内存地址保存在栈内存中。
[removed]
var b
一、变量提升
在ES6之前,Javascr ipt没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。
上个简历的例子如:
console.log(global); // undefined
var global = 'global';
console.log(global); // global
function fn () {
console.log(a); // undefined
var a = 'aaa
本文实例为大家分享了JS作用域链的相关内容,供大家参考,具体内容如下
1、所有全局变量和函数都是作为window对象的属性和方法创建的。
2、在某个方法函数的作用域中,所有代码执行完之后,该作用域被销毁,保存在其中的所有变量和函数定义也会随着被”销毁“,这就是局部作用域。但闭包不会销毁局部变量。
这里的销毁:是指下次再执行此函数的时候,所有的变量又回到最初的状态
var color = "blue";
function changeColor(){
var anothercolor = "
ES6 新增了let命令,用来声明局部变量,所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。
1.ES6可以用let定义块级作用域变量
代码如下:
function f1(){
{
var a = 10;
let b = 20;
}
console.log(a); // 10
console.log(b); // Uncaught ReferenceError: b is not defined
}
f