问题:

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面试题知识点全解(一作用域)的更多相关文章

  1. js面试题知识点全解(一作用域和闭包)

    问题: 1.说一下对变量提升的理解 2.说明this几种不同的使用场景 3.如何理解作用域 4.实际开发中闭包的应用 知识点: js没有块级作用域只有函数和全局作用域,如下代码: if(true){ ...

  2. js面试题知识点全解(一变量类型和计算)

    1.js中使用typeof能得到哪些类型 2.何时使用===和== 3.js中的内置函数 4.js变量按存储方式区分为哪些类型,并描述其特点 5.如何理解json 以下对这些问题的知识点做一些总结: ...

  3. js面试题知识点全解(一原型和原型链1)

    1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...

  4. js面试题知识点全解(一闭包)

    闭包使用场景:1.函数作为返回值,如下场景 function F1(){ var a = 100 //自由变量 //返回一个函数(函数作为返回值) return function(){ console ...

  5. js面试题知识点全解(一原型和原型链)

    1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...

  6. [转载] Python数据类型知识点全解

    [转载] Python数据类型知识点全解 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.c ...

  7. c# 实用精华知识点全解

    本文介绍c#的实用知识点 写在前面(通识) vs常用快捷键 F5 调试运行程序 ctrl F5 不调试运行程序 F11 逐条语句调试 F10 逐过程调试程序 注释快捷键 ctrl + k + c 代码 ...

  8. JAVA笔试题(全解)

      目录 一. Java基础部分................................................................. 9 1.一个".java& ...

  9. Js中this机制全解

    JavaScript中有很多令人困惑的地方,或者叫做机制. 但是,就是这些东西让JavaScript显得那么美好而与众不同. 比方说函数也是对 象.闭包.原型链继承等等,而这其中就包括颇让人费解的th ...

随机推荐

  1. 选择排序的php实现 Selection Sort

    选择排序Selection Sort的PHP实现,安全按照算法所写. 同一排序算法下,需要趟数最多的数列是什么数列呢?思考中. 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序 ...

  2. 冒泡排序的PHP实现 Bubble Sort

    冒泡排序Bubble Sort的PHP实现.代码中函数说明: out_arr,用于将数组输出成一个字符串,以便查看 bubblesort,第一种实现方案,从后往前依次选出需要的值,这里是较大的 bub ...

  3. 解决:cmd中运行monkeyrunner monkey_recorder.py报错: Can't open specified script file

    看lynnLi的博客monkeyrunner之录制与回放(七),遇到了一个问题,我在cmd中输入monkeyrunner monkey_recorder.py,却报错了: 当时第一个感觉时,先到\sd ...

  4. php 5.6以上可以采用new PDD连接数据库的方法。

    <?php// @mysqli_connect($db=localhost,// $_cont['root'],// $_cont['root'],// $_cont['demo'],// $_ ...

  5. Spring_总结_02_依赖注入

    一.前言 本文承接上一节:Spring_总结_01_Spring概述 在上一节中,我们了解了Spring的最根本使命.四大原则.六大模块以及Spring的生态. 这一节我们开始了解Spring的第二大 ...

  6. Scala极速入门

    摘要 当面向对象遇到函数式编程,这就是Scala.简练的语言描述与简单的例子相辅相成,希望能够对大家学习Scala有所帮助. scala 入门 定义 Scala语言是一种面向对象语言,同时又结合了命令 ...

  7. I.MX6 Android 5.1 回到 Android 4.2 emmc 启动

    /*************************************************************************** * I.MX6 Android 5.1 回到 ...

  8. storm入门原理介绍

    转自:http://www.cnblogs.com/wuxiang/p/5629138.html 1.hadoop有master与slave,Storm与之对应的节点是什么?2.Storm控制节点上面 ...

  9. Equation

    You are given an equation: Ax2 + Bx + C = 0. Your task is to find the number of distinct roots of th ...

  10. YII1.1分页

    一.控制器 $criteria = new CDbCriteria(); //这里可以加一些条件 $criteria->addCondition('parent_id='.$this->c ...