重学javascript笔记
一.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;并没有完成定义所以会报错。