js面试总结2
原型和原型链:
题目,知识点,解答;
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的更多相关文章
- 前端js面试中的常见的算法问题
虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...
- js 面试的坑
JavaScript事件属性event.target <!DOCTYPE html> <html> <head> <meta charset="UT ...
- Vue + Js 面试宝典
https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...
- 46、VUE + JS 面试宝典
https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...
- 一些js面试高频知识点的总结
第一部分:Object Prototypes (对象原型) (1)定义一个方法,要求传入一个string类型的参数,然后将string的每个字符间加个空格返回,例如: spacify('hello w ...
- [译]Node.js面试问与答
原文: http://blog.risingstack.com/node-js-interview-questions/ 什么是error-first callback? 如何避免无休止的callba ...
- javascript笔记——js面试问题
1:javascript中的变量提升(先使用再声明,js中的函数也存在函数提升) 2:js中的事件捕获和事件冒泡(是两个相反的过程) 3:js中的动画队列(比如animate动画没有在点击的时候阻止正 ...
- 【Javascript】搞定JS面试——跨域问题
什么是跨域? 为什么不能跨域? 跨域的解决方案都有哪些(解决方法/适用场景/get还是post)? 一.什么是跨域? 只要协议.域名.端口有任何一个不同,就是跨域. ...
- js 面试知识点
基础 原型 原型链 作用域 闭包 异步 单线程 JS API DOM操作 AJAX 事件绑定 开发环境 版本管理 模块化 打包工具 运行环境 页面渲 ...
- JS面试题目
哪些地方会出现css阻塞,哪些地方会出现js阻塞? js的阻塞特性: 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.直到JS下载.解析.执行完毕后才开始继续并行下 ...
随机推荐
- 笔记41 Spring Web Flow——Demo
订购披萨的应用整体比较比较复杂,现拿出其中一个简化版的流程:即用户访问首页,然后输入电话号(假定未注册)后跳转到注册页面,注册完成后跳转到配送区域检查页面,最后再跳转回首页.通过这个简单的Demo用来 ...
- http/tcp/ip/端口
http是www服务器和本地浏览器之间传输超文本的协议. 每一台机器都有一个属于自己的ip地址,计算机也需要知道是哪个程序来接受信息,这里也就引入了端口号,可以简单地理解每一个程序都有一个唯一的端口号 ...
- Vue开发实战
递归组件 关键是组件在模板内能调用自身,关键是name属性 首先我们先定义数据格式 list: [ { title: '标题1' }, { title: '标题2', children: [ { ti ...
- AbstractQueuedSynchronizer 详解
package java.util.concurrent.locks; 基本介绍 AbstractQueuedSynchronizer(队列同步器)可以看作是并发包(java.util.concurr ...
- 分布式项目controller项目中web.xml配置文件的编写
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " ...
- NOIp2018集训test-9-17(am)
这是一套去年在长沙考过的题,但是我当时就没理清楚+没写题解(我以前很多博客都写得跟shi一样,完全没有意义,看到就想打当时的我),所以又考得稀烂. T1.star way to heaven 容易想到 ...
- C#利用栈实现字符串运算解析
附上参考文章链接:https://blog.csdn.net/qq_34831781/article/details/80104219 本人整合修复一些bug后的代码 using System; us ...
- P1624 单词缩写
P1624 单词缩写 题目描述 树树发现好多计算机中的单词都是缩写,如GDB是全称Gnu DeBug的缩写.但是,有时候缩写对应的全称会不固定,如缩写LINUX可以理解为: (1) LINus’s U ...
- 基于SPI的数据报过滤原理与实现
一.个人防火墙技术概述 随着网络安全问题日益严重,广大用户对网络安全产品也越来越关注.防火墙作为一种网络安全工具,早已受到大家的青睐.在PC机上使用的个人防火墙,很大程度上成为广大网民的安全保护者.W ...
- [00]APUE:GCC / GDB / Makefile
http://blog.csdn.net/haoel/article/category/9197 http://blog.csdn.net/haoel/article/details/2886 生成 ...