JavaScript补充

01-延迟和异步加载JS

如何延迟加载JS:defer

defer:js脚本可以延迟到文档完全被解析后执行

<script type="text/javascript" defer src="路径"></script>
如何异步加载JS:async

** async :立即执行脚本,但不妨碍其他页面的操作,谁先加载完了谁执行**

<script type="text/javascript" async src="路径"></script>

02-变量的存储机制原理

变量的存储机制原理

数据类型分为:基本类型引用类型

1、内存
2、内存的声明周期(三个周期)
分配期:分配所需要的内存
使用期:读、写
释放期:不需要的时候将其释放
内存分配==》内存使用==》内存释放

3、javascript内存的生命周期
内存分配:分配你所需要的暂时使用的内存大小
内存使用:读、写内存
内存回收:对于不需要使用的内存将其释放

var num = 10; //内存分配
alert (num); //内存使用
num = null; //  内存回收

4、栈内存、堆内存
栈内存:
1、基本类型(string 、number 、boolean 、undefined 、null)
2、按值访问
3、存储的值大小固定
4、系统会自动分配内存空间
5、空间小,运行效率高
6、先进后出
堆内存:
1、引用类型(Object)
2、按引用访问
3、存储大小不固定
4、由代码进行制定分配
5、空间大,运行效率相对较低
6、无序存储(根据引用直接获取)

image.png

03-JS单线程

一、 JS语言是一个单线程:同一时间只能做一件事情,也就意味着所有的任务需要排队,前一个任务执行完成了,才可以继续执行下一个任务
二、JS语言为什么是单线程,取决于JS用在什么地方,与用户相关。
事件队列(定时器,ajax):先进先出
** 前端最重要的是:用户体验**

for(i=0;i<5;i++){
    setTimeout(function(){
            console.log(i);
      },1000)
}

//输出 5个5
for(var i =0;i<3;i++){
  setTimeout(function(){
      console.log(i);
  },1000*1)
}
//执行三次  每间隔1秒输出3

04-作用域和作用域链

一、作用域(作用的区域或者作用的范围)
全局作用域,全局就是window
二、作用域链:从内部向外,链(从当前作用域开始找,如果找不到向外作用域找,当找到就返回)

05-悬挂变量声明【变量提升】

js会提升所有变量声明,将它们移到作用域的开头

function fun(){
    //var str;//变量提升
    console.log(str);//undefined
    var str = '123'
    console.log(str);//123
}

06- 优先级--作用域面试题

1、作用域链:从内部(当前作用域)逐级向上查找
2、顺序、优先级
变量 > 函数 > 参数 > 变量提升

07-严格模式

一、严格模式:use strict
二、使用方式

  • 1、针对于整个文件【全局】,文件开头第一行写入use strict
  • 2、针对于单个函数【局部】,函数内开头第一行写入use strict
<script type="text/javascript">
'use strict' // 全局方式
</script>
function fun1(){
  'ust strict'   //严格模式局部
}

function fun(){
   //不是严格模式
}

三、作用
1、变量声明问题:var |window
str = 123;//报错
2、禁止this关键字指向全局对象
3、参数重名问题,函数不能有重名的参数
4、arguments对象不能赋值

function fun4(){
  arguments.length = 20;
   console.log(arguments.length,arguments[19]);
}

fun4();
//正常可以运行

function fun4(){
  'use strict'
  arguments= 20;
   console.log(arguments.length);
}

fun4();
//严格模式会报错,arguments.length 还未修正  不能修改arguments

08-闭包

一、块级作用域
{} js没有块级作用域
function(){
js中函数有作用域
}
二、作用域和作用域链

  • 原理:当函数声明的时候,函数会通过内部属性,scope来创建范围

三、 闭包
1、什么是闭包:闭包是一个函数加上到创建函数的作用域的连接,闭包就是关闭了函数的自由变量
简单理解:

  • 第一句话(得到信息):有2个函数,作用域是连接关系。【scope】
  • 第二句话(得到信息):变量不自由==》会停留在内存中,不会销毁
function fun( n ){  //关闭了n的自由    n会保存在内存中
    return function(m){
        n+=m;//同n = n+m; 
        return n;
    }
}

var f = fun(5)
f(1);//n =6
f(1);//n =7
f(1);//n =8   n会保存在内存中

2、闭包可以做什么事儿?无意间共享环境

var lis = document.getElementByTagName('li')
for(var i=0 ;i<lis.length;i++){
  (function(){
      var idx = i;
       lis[i].onclick = function(){
          console.log(idx);
       }
   })()
}

09-undefined和null区别 instanceof

一、 回顾数据类型

  • 原始数据类型(基本数据类型)
    • 字符串string('132')、数值number(1,2,3)、布尔boolean(true,false)、undefined(未定义)、null(没有对象)
  • 引用类型
    • 对象:Object

基本数据类型和引用数据类型的区别:
每个对象都有唯一的标识,并且(严格地)等于自身

undefined和null区别
作者先设计的null,后设计的undefined
JavaScript的最初版本是这样区分的:null是表示一个“无”的对象(空指针),转换为数值时为0;undefined是表示一个“无”的原始值,转为数值时为NaN
注意null的问题:typeof null 返回‘Object’是一个无法修复的错误

二、检测类型

  • typeof
  • instanceOf :返回布尔类型
    • 语法格式:检测的数据 instanceof 所属构造函数名称type instanceof Object
function fIsType(type){
  if(type instanceof Array){
    console.log("数组");
  }else if(type instanceof Object){
      console.log("对象");
   }
}
fIsType([1,2,3])
fIsType(null)
fIsType({})
10-this指向
  • this指向:this指的是函数运行时 所在的“环境”
    补充:引擎会将函数单独保存在内存中

历史原因:js语言设计this,是跟内存的数据结构有关系。
原理:函数可以在不同的环境下运行执行,所以就需要一种机制,能够在函数体内获取当前函数的运行环境。
this的设计目的就是在函数体内,指向函数当前的运行环境

11-函数和对象的原型关系

函数:有 prototype
对象:有 proto

function Fun(){
    this.name = '张三'
}
var obj = new Fun();
console.log(obj.name);//张三
console.log( Fun.prototype === obj.__proto__ );//true

//Fun是一个函数
//obj是一个对象

构造函数的Fun.prototype和对象的obj.proto指向同一个原型对象

image.png

image.png

12-浅拷贝和深拷贝

什么是拷贝
浅拷贝:只复制一层对象,当对象的属性是引用类型时,实质上是复制的其引用,当引用指向的值发生变化的时候,原对象的属性值也会跟着发生变化,互相影响 Object.assign();
深拷贝:在拷贝的时候,创建新的对象,并且把原对象所有的属性都深拷贝到新对象,原属性如果是对象,也会重新创建新的对象并且拷贝到新对象的属性中,这样旧对象和新对象就是互相独立的,互不影响。

  • 1、JSON.parse() + JSON.stringify()
var o ={
  a:1,
  b:{
      a:'你好'
    }
}
var m = JSON.parse(JSON.stringify(o))
console.log(o,m);
m.b.a = '不好'
console.log(o,m);
  • 2、
//封装一个深拷贝方法
var obj = {
  a: 1,
  b: {
    a: "你好",
  },
};

function fun(obj) {
  var m = {};
  if (typeof obj === "object") {
    for (var k in obj) {
      if (obj.hasOwnProperty(k)) {
        if (typeof obj[k] == "object") {
          m[k] = fun(obj[k]);
        } else {
          m[k] = obj[k];
        }
      }
    }
  }
  return m;
}

var createObj = fun(obj);

console.log(createObj.b.a);
console.log(obj.b.a);
createObj.b.a = "不好";
console.log(createObj.b.a);
console.log(obj.b.a);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容