前端面试题笔记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进行绑定,即传入的第一个参数被忽略
上一篇: 前端面试题整理
下一篇: 使用U盘作为启动盘安装ubuntu系统