继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

第一章:预解释/作用域/this原理及应用

欧米雪儿lyy
关注TA
已关注
手记 33
粉丝 64
获赞 315

window浏览器全局作用域,global后台全局作用域;
1.基本数据类型:传给变量的是一个变量值;
2,引用数据类型:传的是一个引用地址;(首先开辟一个空间,把键值对存进去)
3.函数的操作步骤:开辟一空间,把函数体当做字符串传到空间中;生成一个地址,赋值给接受的函数;
fn() 把当前函数执行的结果返回(return后面写的啥,就返回啥,如果没有return,默认返回值undefined)

一.预解释
在当前的作用中,js代码执行之前,浏览器会默认把所有带val和function的进行提前的声明或者定义;
var num = 12;
声明:declare;在全局作用域 中,声明一个num变量
定义:defined: 定义num有一个12的值,给我的变量赋值;
对于带val 和function预解释区别:
var 在预解释的只是提前的声明;
function在预解释的时候提前声明和定义都会完成;

预解释:-----------------------------------------------------------------重要

预解释只发生在当前的作用下。
开始只对window下的进行预解释,只有当函数执行的时候才会对函数体中的私有的变量和函数进行预解释;

当函数执行的时候,首先会形成一个私有的作用域
1)如果有形参,先给形参赋值
2)进行私有作用域预解释
3)预解释中的代码从上到下执行
4)函数形成了一个新的私有作用域保护了里面的私有作用域不受外界的干扰,私有的也修改不了外面的;
闭包:是一种机制,当一个函数执行的时候,形成了一个私有的作用域,保护了里面的参数,这种机制就是闭包;
在私有作用域中‘’ 声明的变量 “”和“” 函数的形参 “”都是私有的作用域;
如果是私有的变量和形参,就和外面没有任何关系;如果不是私有的,我们可以往上面找;

js中内存的分类:根据作用分为栈内存 堆内存
栈内存:用来提供js代码执行的环境(作用域);全局作用域 window,私有的作用域;
堆内存:用来存储引用类型的值, 比如对象类型的键值对,函数存储的是代码字符串;

1.预解释的时候,不管你的条件是否成立,都会把var进行声明;
if ( ‘num ’ in window){
var num = 12;
}
第一步:先进行预解释,在全局变量中声明var num,给全局变量声明了一个num变量;给window增加一个num变量;
第二步:然后代码从上到下执行,
console.log(num) undefined

//定义一个匿名函数,我们只声明一个fn变量;
fn()在这里执行会报错, fn is not function ,fn()==undefined()
var fn = function(){
console.log()
}

2.自定义函数:定义和执行一起完成;
执行函数定义的function在全局作用域下不进行预解释,当代码执行到这个位置的时候定义和执行一起完成;
(function (num){ })(100)
~(function (num){ })(100)
+(function (num){ })(100)
-(function (num){ })(100)
!(function (num){ })(100)

3.如果在预解释的时候,名字已经声明过了,不需要在重新声明,但是需要重新赋值;
第一步进行预解释:最后fn 会定义consolelog(2)
第二步:1.fn()执行 输出2
fn() //2
function fn(){console.log(1)}//预解释声明 +定义之后,函数体销毁
fn() // 2
var fn = 10; //在这里我们给fn重新赋值一个值10,fn成了值类型,
fn() 、// fn is not function
function fn(){console.log(2)}//预解释声明 +定义之后,函数体销毁,不在执行;
fn()

5.如何查找上级作用域
看当前函数是在哪个作用域定义的,那么他的上级作用域就是谁;和函数在哪里执行没有任何关系,只有在哪里定义有关系;
var num =12

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP