Js高级尚硅谷版本

一、分类

      *.基本(值)类型

(1) String :任意字符串

(2) Number :任意数字

(3)boolean :true false

(4)undefined:undefined

(5) null:null

      *.对象(引用)类型

(1)Object:任意对象

(2)Function:一种特别的函数(可执行)

(3)Array:一种特别的对象(数字下标,内部数据是有序的)

      2.判断

(1)typeof                           //  a = {}  typeof a  返回数值类型  objct 

(2) instanceof                   //  a = {}   console.log(a instanceof object)  //返回Boolean true 

(3)===                              //

    3.面试常问题目

(1)undefined 和 null 有啥区别?

*初始值为null表名为对象。unll定义并赋值为null undefined定义未赋值,最后要赋值为null为了垃圾回收

(3)什么时候给变量赋值为null呢?

初始赋值表名将要赋值为对象。结束前,让对象成为垃圾对象(将被垃圾回收器回收)

(6)严格区分变量类型和数据类型

*数据类型

   基本类型

   对象类型

*变量类型(变量内存值的类型)

   基本类型:保存的就是基本类型的数据

   引用类型:保存的是地址

二、数据——内存——变量

    1、什么是数据?

      *存储在内存的特定信息 本质是01010101

    2、什么是内存?

      *可存储数据的空间(临时的)

    3、什么是变量?

      *可变化的量,有变量名和变量值组成,每个变量都有一个内存,变量值就是内存中保存的数据

    4、变量、内存、数据的关系?        *内存用来存储数据,变量是内存的标识
    5、var a =xxx 保存的是什么?  基本数据与地址值

    6、在js调用函数是值传递还是地址传递     

     值传递输出的是3

    7、js引擎如何管理内存   分配地址  释放地址

三、对象

  1、什么是对象?

      *多个数据的封装体

      *用来保存多个数据的容器

      *一个对象代表现实的一个物体

   2、为啥要用对象       *统一管理多个数据

   3、对象组成

      *属性:属性名(字符串)和属性值(任意)组成

      *方法:一种特别的属性(属性值为函数)

   4、如何访问对象内部数据   

.属性名   :有时不能用  1.包含特殊字符不能用 - 空格  p.content-type不可以  2.属性名不确定时候

[属性名] :任何时候都能用

四、函数

1、什么是函数

实现特定功能的n条语句

只有函数能执行,其他类型的数据不能执行

2、为啥要用函数

提高复用性

提高可读性

3、如何定义函数

function函数声明  function  a                表达式    var a = 

4、如何调用函数

test():直接调用    obj.test() 对象调用   new test() new调用   test.call/apply(obj):临时让test成为obj的方法进行调用

五、回调函数

1、什么函数才是回调函数

你没定义的  你没有调   但他最终执行了

2、常见的回调函数 

dom事件回调  定时器  ajax回调     生命周期

六、立即执行函数 IIFE   inmmediately-invoked-function-expression 

隐藏实现:function()()匿名函数自调用,不会污染外部命名空间

七、函数的this指向

1、this是什么    所有函数内部都有一个变量this   他的值是调用函数的当前对像

2、如何确定this的值  test() window        p.test() p     new test():新创建的对象     p.call(obj)   obj

八、JavaScript后面是否加分号     尤雨溪(vue创始人)

 九、函数的prototype

1、函数的prototype属性图

每个函数都有一个prototype属性,它默认指向一个空对象(即成为:原型对象)

原型对象中有一个属性constructor,它默认指向函数对象

2、给原型对象添加属性(一般是方法)

作用:函数的所有实例对象自动拥有原型中的属性

3、程序员能操作显示原型但是不能直接操作隐式原型(es5之前)

每个函数function都有一个prototype,即显示原型

每个实例对象都有一个__proto__,可称为隐式原型     const obj = new   Fn() 

4、对象的隐式原型的值为其对应构造函数的显示原型的值

十、原型链

1、读取对象的属性值时:会自动到原型链中查找

2、设置对象的属性值时:不会查找原型链,如果当前对象中没有此属性,直接添加此属性并设置其值

3、方法一般定义在原型中,属性一般通过构造函数定义在对象本身上

十一、instanceof 是如何判断的?

表达式:A instanceof B

如果B函数的显示原型(prototype)对象在A对象的原型链(proto)上,返回true,否则false

Function是通过new 自己产生的实例

****要看线能不能连上注意两边的位置,还要注意箭头的方向不能反着走********

案例

案例

 十二、面试

十三、变量提升 

1、变量的提升

通过var定义(声明)的变量,在定义语句之前就可以访问到,值:undefined

2、函数声明提升

通过function声明的函数,在之前就可以直接调用,值:函数定义(对象)

3、问题、变量提升和函数提升是如何产生的?

十四、执行上下文栈 所有函数调用一次,再加上自己调用的次数为总次数

函数提升在变量提升的后面  

十五、全局作用域和局部作用域

 

十六、闭包****** 

1、如何产生闭包   当一个嵌套内部函数引用了嵌套外部函数变量时就产生了闭包

2、闭包是什么?   闭包时嵌套的内部函数(绝大多数人)     包含被引变量(函数)对象(极少数人)

3、产生闭包的条件  函数嵌套    内部函数引用外部函数的数据(变量/函数)

4、使用函数内部的变量在函数执行完后,任存活在内存中(延长了局部变量的生命周期)

5、让函数外部可以操作(读写)到函数内部的数据(变量/函数)

6、函数执行完后,函数内部声明的局部变量是否还存在?     一般不存在,存在于闭包中的变量才可能存在

7、在函数外部能直接访问函数内部的局部变量码?     不能,但我们可以通过闭包让外部操作它

 十七、闭包的缺点(内存泄漏)

1、函数执行完,函数内的局部变量没有释放,占用内存事件会变长(缺点)

2、容易造成内存泄漏(缺点)

解决:能不用就不用  ,  及时释放

3、内存溢出   

*一个程序运行出现的错误 *当程序运行需要的内存操过剩于的内存时,就抛出内存溢出的错误  for(i=0,i<100000,;i++){new Array(1232131231)}

4、内存泄漏

*占用的内存没有及时释放  *内存泄漏多了就会变成内存溢出的错误

*常见的内存泄漏  :

(1)意外的全局变量  ()=>{a=10}  局部没有声明变成全局变量

(2)没有及时清理的计时器或回调函数

(3)闭包

十八、闭包的面试 

指向的是window(不是闭包因为没有用到外部变量) 

 

十九、对象创建的方式

*new Object()    {}创建    工厂模式     自定义构造函数

(结束) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值