小白学前端js高级-03

133 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

自学前端

  • 前文
    • 本文是我自学js的一些知识以及个人理解, 希望帮助到一些想要学习前端的小白朋友
    • 介绍本次学习的是js高级相关知识
    • 这是基于我学习的笔记而来的文章
    • backend: 后端 frontend: 前端

IIFE

  1. 理解
    • 全称略*
  2. 作用
    • 影藏实现
    • 不会污染外部(全局)命名空间
    • 用它来编写js模块
(function (){//匿名函数自调用
    console.log("阿巴阿巴阿巴");
 })(); 

this

  1. this是什么?
    • 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
    • 所有函数内部都有一个变量this
    • 它的值是调用函数的当前对象
  2. 如何确定this的值?
    • test() : window
    • p.text() : p
    • new test() : 新创建的对象
    • p.call(obj) : obj

js一条语句后面可以不加分号

  1. js一条语句后面可以不加分号
  2. 是否加分号是编码风格的问题, 没有营部应该只有你自己喜不喜欢
  3. 在下面2中情况下不加分号会有问题
    • 小括号开头前的一条语句
    • 中方括号开头前一条语句
  4. 解决办法: 在首行加分号
  5. 强有力的例子: vue.js库

总结

1.分类

分类.png

2.判断

判断.png

3.相关问题

    1. 问题1:vara=x,a内存中到底保存的是什么? *x是一个基本数据 *00X是一个对象 *00X是一个变是
    1. 关于引用变量赋值问题 *2个引用变量指向同一个对象,通过一个引用变量修改对象内部数据,另一个引用变量也看得见 *2个引用变量指向同一个对象让一个引用变量指向另一个对象另一个引用变量还是指向原来的对象
    1. 问题:在s调用函数时传递变量参数时,是值传递还是引用传递? *只有值传递,没有引用传递,传递的都是变量的值,只是这个值可能是基本数据,也可能是地址(引 用)数据 *如果后一种看成是引用传递,那就值传递和引用传递都可以有
    1. 问题:JS引擎如何管理内存? 1.内存生命周期 1).分配需要的内存 2).使用分配到的内存 3).不需要时将其释放/归还 2.释放内存 *为执行函数分配的栈空间内存:函数执行完自动释放 *存储对象的堆空间内存:当内存没有引用指向时,对象成为垃圾对象,垃圾回收器后面就会回收释 放此内存

原型

  1. 函数的prototype属性(图)
    • 每个函数都有一个prototype属性, 它默认指向一个Object空对象(即称为: 原型对象)
    • 原型对象中有一个属性constructor, 它指向函数对象
  2. 给原型对象添加属性(一般都是方法)
    • 作用: 函数的所有实例对象自动拥有原型中的属性(方法)

显示原型于隐式原型

  1. 每个函数function都有一个prototype, 即显式原型(属性), 默认指向一个空的Object对象
  2. 每个实例对象都有一个_proto__,可称为隐式原型
  3. 对象的隐式原型的值为其对应的构造函数的显式原型的值
  4. 内存结构(图)
  5. 总结:
    • 函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空的Object对象
    • 对象的_proto__属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性值
    • 程序员能直接操作显式原型, 但不能直接操作隐式原型(ES6之前)

后记

  • 希望对对前端有兴趣的朋友们有帮助
  • 这篇文章主要是关于js高级的, 希望大家喜欢
  • js的作者是美国人布兰登·艾奇, 非常厉害的人