面向对象高级( 随手记-5)

对于作用域问题:只管在哪个环境中创建的,不管是在哪个环境中调用的,
不管在哪个环境中调用,最终都要回到创建他的环境中执行;

变量查找: 从内到外

内部函数的作用域 包含了外层函数的 作用域 
(只能访问到自身作用域和全局作用域)

最佳实践:   只在全局环境中使用new Function,
因为:在函数内部创建函数,只能访问到自身作用域 和全局作用域


运算符的优先级:
new  :  带参数列表  高于  不带参数列表

命名冲突::
1.两个变量命名冲突;   (函数表达式)
重复的声明无效;    var num; var num;//无效   num=123; num=345;

2.两个函数命名冲突;
后面覆盖前面

3.一个函数与一个变量命名冲突:
3.1 如果是在变量赋值之前访问的变量的值,那么此时的值为:函数
3.2 在变量赋值之后访问变量的值.那么此时的值为 :变量的值

var fn ;
function fn(){console.log('函数')};
console.log(fn) ===> 函数
fn=123;
console.log(fn)//123

4.函数 参数与变量命名冲突:
可以认为:函数的参数是最先被提升的
重复声明的变量无效,但是对于函数来说,会把函数的值覆盖掉

没有赋值之前:
如果一个变量与参数命名冲突:此时结果为参数的值;
如果一个函数与参数命名冲突 此时结果为 函数

赋值之后:
此时的值就是刚刚的值;
____________________________________________________

闭包的介绍::  closure  (词法闭包 / 函数闭包)

在函数内部声明的变量在函数外部无法访问到,因此,我们就是这个函数
构成了一个闭包;
__________
从广义上来看:

js中所有的函数都能够形成了一个闭包;

闭包有两部分组成:
1.函数体
2.函数所处的环境(作用域链)

把函数体以及函数所处的环境所构成的一个综合体 称为:闭包
_________
从狭义来看:

var fn =function(){ var foo=functiong(){} return foo;} //闭包模型

一个函数中返回了另外一个函数,这是最常用的闭包模型; 
_______
理解闭包:

1.只看函数是在哪个环境中被创建的,不管函数是在哪个环境中被调用的
2.不管在哪个环境调用的,最终都要回到创建它的环境中来执行代码;即便离开
创建它的环境,也不例外;

foo 的作用域链 : foo 自身-->函数fn的作用域 -->全局作用域(可省略)

闭包的作用:
1.对函数内部的变量起到了保护的作用;

实现对变量的读取和设置
1.对变量起到保护的作用
2.能够读取变量的值;
3.能够设置变量的值

外层函数的作用:保护变量
内部函数的作用:操作变量

闭包可以运行多个实例;
多个实例之间是不会相互影响的;

函数调用时需要占用内存的,js解析引擎会为每一次调用分配一块内存;
并且两块内存是不会相互影响的!

闭包占用的内存会一直占用的,是不会释放掉的;(直到关闭应用)

普通函数,函数调用的时候也会占用内存,但是,函数调用的时候函数占用的
内容就会被释放掉;

javascript 是通过内部的垃圾回收机制,自动定期回收机制

函数fn调用占用的内存,为什么没有释放掉;
因为内部函数对外层函数的作用域存在一个引用;也就是引用了外层函数的
内存,因为外部函数产生的内存有一个引用,js垃圾回收机制就不会回收这块
内存

手动释放闭包占用内存;   test=null // 设置为null  就行了
这样处理以后就没有任何标量在指向闭包占用的内存了,就会被回收

有两块内存:
1.创建函数占用内存;
2.函数调用的时候会占用内存;

内存释放,是把函数调用占用的内存释放掉;

使用缓存:cache   解决斐波那契数列大量重复计算的问题
缓存的作用:提高程序运行的效率

赋值表达式,是由等号右边决定的;
__________________________________________

沙箱模式::   (fucntion(){})();   //自调用函数
作用:为了减少全局污染问题
就是利用函数作用域的特点,因为在函数内部创建的变量,
在函数外部无法访问到, 也就是对全局环境起到保护作用;

为什么使用自调用函数??
1.要有作用域(因为只有函数能够提供,所以需要函数)
2.函数不调用函数内部的代码是不会执行的;

(function(){ 代码 })()

需要将 jQuery 暴露到全局环境中才能使用

(function(window){ 代码 })(window)
window.jQuery= window.$ = jQuery
添加给window的属性,就相当于创建一个全局变量
// 将window作为参数传入:
1.减少作用域的查找;
2.有利用代码的压缩;

自调用函数有一个专业的名字:
LLFE  立即  执行  函数  表达式
___________________________________________

逗号运算符,返回逗号右边的值

笔记连载中 , 纯手打 , 个人笔记 , 不喜勿喷 ,欢迎改正微笑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值