欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端面试题笔记01-JS篇

程序员文章站 2022-03-04 12:07:27
...

一:

//下面这个JS程序的输出是什么:
function Foo() {
  var i = 0;    
  return function() {
    console.log(i++);
  }}
var f1 = Foo(),    
    f2 = Foo();
    
f1(); //0
f1(); //1
f2(); //0

解析:
重点理解:函数Foo返回值是一个匿名函数,因此每次调用Foo函数,都会得到一个新的函数(即f1和f2是指向不同的函数对象)

相关知识点:
1.Function是引用类型,保存在堆中;而变量(f1,f2)是保存在栈中;f1,f2指向堆中的function对象
2.闭包:要让一个函数(产生新的作用域)定义的局部变量使外部可以访问,可通过返回子函数赋值给一个变量(如f1、f2)的方法,使该变量可以访问到Foo被调用产生的环境(函数作用域)。只要一个环境有可能被访问到,它就不会被销毁。

二:箭头函数的this

箭头函数中的this绑定定义时所在的作用域
由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略

相关标签: JavaScript