js面试题知识点全解(一作用域和闭包)
问题:
1.说一下对变量提升的理解
2.说明this几种不同的使用场景
3.如何理解作用域
4.实际开发中闭包的应用
知识点:
js没有块级作用域
只有函数和全局作用域,如下代码:
if(true){
var name='killua' //把name定义在块里和放在外面是一样的,等同于在外面声明一个变量name,在块内给name赋值
}//同等于下面的代码
//建议用下面方式写
var name
if(true){
name='killua'
}
console.log(name) //打印出来killua
//函数和全局作用域
var a=100 //定义全局作用域变量
function fn(){
var a=200 //在函数中定义变量不会污染外面定义的变量,只能函数里面用
console.log('fn', a)
}
当前作用域没有定义某个变量,所以要去它的父级作用域找,这样的就是作用域链
//作用域链例子1
var a = 100 //自由变量
function fn(){
var b = 200
console.log(a)
console.log(b)
}
fn()
//作用域链例子2
var x =100
function F1(){
var y = 200
function F2(){
var z =300
console.log(x)
console.log(y)
console.log(z)
}
F2()
}
F1()
作用域和闭包-执行上下文
console.log(a); //undefined
var a=10; //这种写法,因为a是全局变量。会把var a;提到最前面
/*以上代码等同于:
var a;
console.log(a);
a=10;*/ fn("killua");
function fn(name){
console.log(name)
} //函数声明会提前到最前面,所以可以先执行函数,再声明函数也可以 fn('killua')
function fn(name){
console.log(this) //
console.log(arguments) //参数
age=10
console.log(name, age)
var age bar(100)
function bar(num){
console.log(num)
} //在函数内也会把函数声明,变量声明提到函数内部最前面
} //函数执行完输出
//killua 10
//
this介绍:
this要在执行时才能确认,定义时无法确认
var a= {
name = 'killua',
fn: function(){
console.log(this.name)
}
}
a.fn() //this===a
a.fn.call({name:'L'}) //this==={name:'L'}
var fn1 =a.fn
fn1() //this===window
构造函数中的this
function Foo(name){
this.name = name
}
var f = new Foo('killua') //实例化
对象中的this
var obj = {
name:'L'
printName: function(){
console.log(this.name)
}
}
obj.printName() //作为对象属性来执行,this指向obj这个对象
普通函数中的this
function fn(){
console.log(this) //作为一个普通函数执行,this === window
}
fn()
call apply bind
function fn1(name,age){
console.log(this)
}
fn1.call({x:10},"killua",20) //call调用一个对象的一个方法,以另一个对象替换当前对象,这里把this替换成{x:10}
fn2.apply({x:10},['killua',20]) //apply和call方法一样,只是用数组的方式传递参数,call比较常用
var fn3 = function(name,age){
console.log(this)
}.bind({y:200}) //.bind()方法和前两个一样,把this替换成{y:200},但是必须用在函数表达式,不能用在普通函数
fn3('killua',20)
以上知识点总结出题目内容
说一下对变量提升的理解:
1.变量定义 //变量声明会提前
2.函数声明(注意和函数表达式的区别) //函数声明提升
说明this几种不同的使用场景:
1.作为构造函数执行
2.作为对象属性执行
3.作为普通函数执行
4.call apply bind
如何理解作用域:
1.自由变量
2.作用域链,即自由变量的查找
3.闭包的两个场景
js面试题知识点全解(一作用域和闭包)的更多相关文章
- js面试题知识点全解(一作用域)
问题: 1.说一下对变量提升的理解 2.说明this几种不同的使用场景 3.如何理解作用域 4.实际开发中闭包的应用 知识点: js没有块级作用域只有函数和全局作用域,如下代码: if(true){ ...
- js面试题知识点全解(一变量类型和计算)
1.js中使用typeof能得到哪些类型 2.何时使用===和== 3.js中的内置函数 4.js变量按存储方式区分为哪些类型,并描述其特点 5.如何理解json 以下对这些问题的知识点做一些总结: ...
- js面试题知识点全解(一原型和原型链1)
1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...
- js面试题知识点全解(一闭包)
闭包使用场景:1.函数作为返回值,如下场景 function F1(){ var a = 100 //自由变量 //返回一个函数(函数作为返回值) return function(){ console ...
- js面试题知识点全解(一原型和原型链)
1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...
- [转载] Python数据类型知识点全解
[转载] Python数据类型知识点全解 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.c ...
- [js]js代码执行顺序/全局&私有变量/作用域链/闭包
js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...
- 【 js 基础 】【读书笔记】作用域和闭包
一.编译过程 常见编译性语言,在程序代码执行之前会经历三个步骤,称为编译. 步骤一:分词或者词法分析 将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元. 例子: var a = 2 ...
- c# 实用精华知识点全解
本文介绍c#的实用知识点 写在前面(通识) vs常用快捷键 F5 调试运行程序 ctrl F5 不调试运行程序 F11 逐条语句调试 F10 逐过程调试程序 注释快捷键 ctrl + k + c 代码 ...
随机推荐
- Struts2的知识点小总结
strust2是 struts1和webwork的结合 (本质相当于servlet) 核心:拦截器 interceptor action ognl和valuestack 使用struts的准备工作 ...
- .NET 跨平台界面框架和为什么你首先要考虑再三
原文地址 现在用 C# 来开发跨平台应用已经有很成熟的方案,即共用非界面代码,而每个操作系统搭配特定的用户界面代码.这个方案的好处是可以直接使用操作系统原生的控件和第三方控件,还能够和操作系统 ...
- Japanese Learning - Words and Sentences 1
1. いらっしゃいませ.何名さまですか. 二人です. タバコをお吸いになりますか. かしこまりました.少々お待ちください. お勘定お願いします. ご一緒でよろしいでしょうか. 別々にお願いします. 2 ...
- Host 'hello-PC' is not allowed to connect to this MySQL server远程连接mysql授权
问题:"Host 'admin-PC' is not allowed to connect to this MySQLserver" (其中,admin-PC为我的机器名) 原 ...
- JAVA金额按比例分摊,零头处理
金额精确计算,必须使用BigDecimal; 平均分摊,分摊的零头,一般都是由数据"精度"和分摊系数决定的: 主要是如何对零头进行处理,保证尽可能的平均分配. 1.按户均摊 /** ...
- JS - 数据类型的值拷贝函数(深拷贝)
function mottoClone (obj) { if (obj === null || typeof obj !== 'object') return obj; if (obj instanc ...
- vue mint UI
vue 与mint UI 结合开发手机app html5页面 api 文档 http://mint-ui.github.io/#!/zh-cn
- [luogu P3384] 【模板】树链剖分 [树链剖分]
题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...
- 【Owin 学习系列】2. Owin Startup 类解析
Owin Startup 类解析 每个 Owin 程序都有 startup 类,在这个 startup 类里面你可以指定应用程序管道模型中的组件.你可以通过不同的方式来连接你的 startup 类和运 ...
- JStorm与Storm源码分析(一)--nimbus-data
Nimbus里定义了一些共享数据结构,比如nimbus-data. nimbus-data结构里定义了很多公用的数据,请看下面代码: (defn nimbus-data [conf inimbus] ...