原型和原型链:

题目,知识点,解答;

1.如何准确地判断一个变量是数组类型

2.写一个原型链继承的例子

3.描述new一个对象的过程

4.zepto(或其他框架)源码中如何使用原型链。

知识点

构造函数:

构造函数-扩展

原型规则和示例:

原型链:

instanceof:

构造函数:

 function Foo(name,age){
this.name = name
this.age = age
this.class = 'class-1'
}
var f = new Foo('Zhang','20')

构造函数-扩展:

原型规则和示例:

5条原型规则,原型规则是学习原型链的基础

1.所有的引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性(除了,null,意外)

2.3.所有的引用类型(数组,对象,函数),都具有一个_proto_(隐士原型)属性,属性值是一个普通的对象,直接指定他的构造函数的prototype属性值,直接指向他的构造函数的

prototype类型属性值。

4.所有的函数,都有一个prototype(显示)属性,属性值也是一个普通的对象。

5.当试图得到一个对象的属性值时,如果这个对象本身没有这个属性,那么会去他的__proto__(即他的构造函数的prototype)中寻找。

循环对象自身的属性

原型链:

作用域和闭包:

范围:一段<script>或者一个函数

全局:变量定义,函数声明。

函数:变量定义,函数声明,this,arguments

全局声明:就是把变量的声明都放到前面去。

call,apply,bind:

  fn()

        function fn1(name,age){
alert(name)
console.log(this)
}
fn1.call({x:100},'zhangshan',20) var fn2 = function (name,ag){
alert(name)
console.log(this)
}.bind({y:200})
fn2.call({x:100},'zhangshan',20)

作用域链:

在自己的下的小函数体内没有,去上一级作用域找没有在去上一级查找,这个叫作用域链。

        //块级作用域
var name
if(true){
name = 'zhangshan'
}
console.log(name) // //作用域,a是一个全局作用域
var a = 100;
function fn(){
var b = 200
console.log(a) //自由变量
console.log(b)
}
fn() //作用域链
var a = 100
function f1() {
var b = 200
function f2(){
var c = 300 console.log(a)
console.log(b)
console.log(c)
}
f2()
}
f1()

闭包:

闭包的使用场景

函数作为一个返回值(返回上一个demo)

函数作为参数传递(自己思考)

function F1(){
var a = 100
return function () {
console.log(a) //自由变量,父作用域寻找
}
}
var f1 = F1()
var a = 200
f1()
//函数作为返回值
//函数作为参数传递
function F1(){
var a = 100
return function () {
console.log(a) //自由变量,父作用域寻找
}
}
var f1 = F1()
function F2(fn){
var a = 200
fn()
}
F2(f1)

闭包的总结:

变量的提升:变量的定义,函数的声明

说明this的几种不同使用场景:作为构造函数的执行,作为普通函数的执行,call,Apply ,bind

作用域和闭包的解题代码:

js面试总结2的更多相关文章

  1. 前端js面试中的常见的算法问题

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

  2. js 面试的坑

    JavaScript事件属性event.target <!DOCTYPE html> <html> <head> <meta charset="UT ...

  3. Vue + Js 面试宝典

    https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...

  4. 46、VUE + JS 面试宝典

    https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...

  5. 一些js面试高频知识点的总结

    第一部分:Object Prototypes (对象原型) (1)定义一个方法,要求传入一个string类型的参数,然后将string的每个字符间加个空格返回,例如: spacify('hello w ...

  6. [译]Node.js面试问与答

    原文: http://blog.risingstack.com/node-js-interview-questions/ 什么是error-first callback? 如何避免无休止的callba ...

  7. javascript笔记——js面试问题

    1:javascript中的变量提升(先使用再声明,js中的函数也存在函数提升) 2:js中的事件捕获和事件冒泡(是两个相反的过程) 3:js中的动画队列(比如animate动画没有在点击的时候阻止正 ...

  8. 【Javascript】搞定JS面试——跨域问题

    什么是跨域? 为什么不能跨域? 跨域的解决方案都有哪些(解决方法/适用场景/get还是post)?  一.什么是跨域?       只要协议.域名.端口有任何一个不同,就是跨域.           ...

  9. js 面试知识点

    基础           原型  原型链 作用域  闭包 异步  单线程 JS API        DOM操作 AJAX 事件绑定 开发环境    版本管理 模块化 打包工具 运行环境    页面渲 ...

  10. JS面试题目

    哪些地方会出现css阻塞,哪些地方会出现js阻塞? js的阻塞特性: 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.直到JS下载.解析.执行完毕后才开始继续并行下 ...

随机推荐

  1. Stack&Heap的理解

    Heap(堆):在英文中有杂乱的堆意思,意译中文为堆:其特点为先进先出. 堆空间分配:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表. Stack(栈):在英 ...

  2. 几道51nod上据说是提高组难度的dp题

    1409 加强版贪吃蛇 听着懵逼做着傻逼. 每个格子只能经过一次,穿过上下界答案清0,不考虑穿的话就随便dp.如果要穿就是从尽可能上面的位置穿过上界,尽可能下面的位置穿过下界. 那么转移这一列之前找一 ...

  3. Python3 From Zero——{最初的意识:005~文件和I/O}

    一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...

  4. 《DSP using MATLAB》Problem 8.42

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  5. 新手git遇到的问题

    1. 如何撤销git add,不小心执行了git add . 操作,但是又不能提交所有的文件,因为对应不同的分支,现在怎么样可以将git add 撤销回来? 解决:git reset HEAD(暂时尝 ...

  6. solr 如何实现精确查询

    第一条和第三条不应该出现的. 解决办法

  7. [Java]读取文件方法大全(转载)

    1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图 ...

  8. spark集群进入 bin 下面目录./spark-shell 出现Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    spark集群启动的时候可以正常,进入 ./spark-shell 就会出现如下错误 配置文件:spark-env.sh export JAVA_HOME=/usr/java/jdk1.7.0_51e ...

  9. ps-使用通道抠图为XX换背景

    第一步先载入图片 点击通道,复制蓝色通道 然后点击新的蓝色通道,图像-调整-曲线-改变输入输出, 然后用历史画笔全部填黑.  然后载入选区,复制.在图层中新建蒙版 黏贴,反向(CTRL+I)就可以了. ...

  10. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...