hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Webpack

  • React

  • JavaScript

    • new命令原理
    • ES5面向对象
    • ES6面向对象
    • 多种数组去重性能对比
    • JS随机打乱数组
    • 判断是否为移动端浏览器
    • 将一维数组按指定长度转为二维数组
    • 防抖与节流函数
    • JS获取和修改url参数
    • 比typeof运算符更准确的类型判断
    • 三级目录

    • JavaScript

      • JavaScript之函数尾调用与函数尾递归
      • 一种实现call、apply、bind的方法
      • 实现call、apply、bind
      • JavaScript闭包详解
      • 窗口间的通信与iframe跨域
      • JavaScript逻辑运算符“&&”和“||”短路原则的应用
      • Object原型梳理
      • JavaScript设计模式之发布&订阅模式
      • JavaScript核心:两链一包
        • 作用域与闭包
          • 作用域
          • 闭包
        • 原型和原型链
          • 原型
          • 原型链
      • JavaScript之正则
      • 字符串拼接性能优化
      • JavaScript变量转换
  • Vue

  • 混合开发

  • 学习笔记

  • 微信小程序

  • 前端
  • JavaScript
  • JavaScript
hn-failte
2018-03-23

JavaScript核心:两链一包

# JavaScript核心:两链一包

# 作用域与闭包

# 作用域

1、变量提升

  • 浏览器解析器在解析js时,预解析变量并将变量名提升到作用域的行为
  • 函数与变量同时声明为一个字符时,预解析时函数有高优先级

2、全局变量

  • 在全局声明的变量,作用域在全局
  • 函数内有未使用声明符声明的变量时,这个变量会被浏览器转换为全局变量

3、局部变量

  • 在函数内声明的变量,作用域在函数内
  • 函数的传参作用域在函数内,传参与全局变量不是同一个变量

3、作用域链

  • 执行函数时,总是先从函数内部找局部变量
  • 若没有,则会依次向上级作用域寻找变量

# 闭包

闭包就是访问函数内部私有属性或私有函数的公有方法

  • 1、函数拥有局部作用域,无法在外部访问局部的属性或方法
function test(){
    var a="a";
}
console.log(a);//undefined
1
2
3
4
  • 2、函数可以设置公共属性或方法,是的外部能够进行访问
function test(){
    this.a="a"
}
console.log(new test().a);//a;
1
2
3
4
  • 3、通过使用公共方法操作私有属性或方法,这种方式就称之为闭包
function test(){
    var a="a";
    this.getA=function(){ return a; }
    this.setA=function(a){ this.a=a; }
}
1
2
3
4
5

# 原型和原型链

# 原型

1、构造函数:construct

用来生成对象的函数。最常见的有Object、Function、Array、String、Number等。

2、new的作用

(1)创建一个对象 (2)改变构造函数的this指向为实例对象 (3)在实例对象中产生__proto__属性,指向构造函数的ptototype

3、原型

(1)定义函数时,会生成一个prototype的属性,指向当前函数,这个属性称之为函数的原型 (2)构造函数new时,会生成一个对象,并且会生成__proto__属性,指向构造函数的prototype,这个属性称之为这个对象的原型 (3)构造函数作为对象时存在__proto__,指向Function原型 (4)所有的原型对象的__proto__最后都会指向Object原型,而Object原型的__proto__是null。 (5)任何原型的constructor指向构造函数,而构造函数的prototype又指向原型,如此,会形成死循环(类似先有鸡还是先有蛋)

# 原型链

根据原型的规则画出的关系链称为原型链。

编辑 (opens new window)
#Prototype
上次更新: 2021/08/05, 12:37:41
JavaScript设计模式之发布&订阅模式
JavaScript之正则

← JavaScript设计模式之发布&订阅模式 JavaScript之正则→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式