温故而知新:1.重学javascript笔记(js内存机制之变量提升)

一.js的数据类型

基本数据类型

1.number
2.string
3.undefined
4.null
5.boolean

引用数据类型

1.object
2.function

二.基本数据类型和引用数据类型的本质区别

基本数据类型是操作值的,引用数据类型是操作引用地址的

当浏览器加载HTML页面的时候,会提供一个供全局js代码执行的环境即全局作用域(global/window)

var num = 25;
var obj= {
   name:'feiwu',
   age:25
}
function fn(){
   console.log('I like javascript')
}

图解如下代码运行:
在这里插入图片描述

三.预解释(变量提升js自带机制)

在当前作用域中js代码执行之前浏览器首先会默认的把所有var和function的进行提前的声明(declare)或者定义(defined)

1)理解声明和定义

var num = 25;

声明(declare): var num; 通知浏览器在全局作用域中有一个num变量
定义(defined): num = 25; 给声明的变量赋值

2)带var关键字和带function关键字预解释区别
带var的预解析只是提前声明
带function的是同时声明和定义的

3)图示预解释:

var num1 = 25;
var obj = {name:'feiwu',age:25}
funtion fn(num1,num2){
   var total = num1 + num2
   console.log(total)
}

在这里插入图片描述

四.js中内存分类

栈内存

栈内存用来提供一个供js代码执行的环境 作用域:(分为全局作用域和私有作用域)

堆内存

堆内存用来存储引用数据类型的值 ->如对象存储的是属性名和属性值,fn函数存储的是函数字符串
这里的预解释发生在栈内存里面

举个例子:

//一个变量如果只声明了没有定义默认为undefined
console.log(num1)  //这里因为由于预解释所以输出undefined
var num1 = 25;
fn(100,200)//这里也是由于js预解释的时候已经对函数声明+定义已经完成   输出结果为300
funtion fn(num1,num2){
   var total = num1 + num2
   console.log(total)
}

五.特别注意

fn(100,200)
var fn = function(num1,num2){
console.log(num1+num2)
} // 这样函数的写法的结果会提示Uncaught TypeError: fn is not a function
at :1:1
因为js预解释的时候只是先var fn;并没有完成定义所以会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值