分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

js面试题-----作用域与闭包

发布时间:2023-09-06 01:09责任编辑:白小东关键词:js闭包面试题作用域

1、问题代码:

var length = 10;function fn(){ ???console.log(this.length);}var obj = { ???length:5, ???method:function(fn){ ???????fn(); ???????arguments[0]() ???}}obj.method(fn,1);//输出10 ?2

  解答:第一个fn执行的this是指向window 的所以this.length指的是10   而arguments[0]()可以理解为下面代码 这里的length是arguments本身的自己的length属性

var arguments = { ????0:fn, ????1:1, ????. ????. ????. ????length:2 ?}

2、问题代码 

var obj = { ???getName:function(){ ???????console.log(this) ???}}obj.getName();//obj(obj.getName)();//obj(obj.getName = obj.getName)()//window

  解答:  第一个很明显 getName执行的this是obj    第二个不是很理解  大概理解为obj.getName是一个整体  自执行函数执行   也就是getName执行  所以 跟第一个一样 也是obj

  第三个可以这么理解  两边赋值之后的结果为function (){console.log(this)} = function (){console.log(this)}  所以此时执行的this是代表window(第二个希望有会的可以评论讲解一下 谢谢)

题目1:说一下对变量提升的理解

答案:使用var定义的变量或者函数表达式在代码执行的时候 会先进行变量提升(声明)  即先赋值为undefined;而函数声明 会同时定义和声明

题目2:说明this几种不同的使用场景

答案:作为构造函数执行   作为对象属性执行  作为普通的函数执行   call  apply  bind

题目3:创建10个<a>标签,点击的时候弹出来对应的序号

答案:这里主要通过自执行函数来获取每次循环的时候的i值

var i,a;for(i = 0;i<10;i++){ ?(function(i){ ????a = document.createElement(‘a‘); ????a.innerHTML = i+‘<br>‘; ????a.addEventListener(‘click‘,function(e){ ???????e.preventDefault(); ???????alert(i); ????}) ????document.body.appendChild(a); ??})(i)} ???????????????????????

题目4:如何理解作用域

答案:函数执行的时候  就会创建一个私有的作用域供里面的代码执行。当函数里面要访问变量的时候,首先会在自己的作用域当中进行查找,如果找不到会到其父级的作用域中继续查找,这就形成了一个作用域链。

题目5:实际开发中闭包的应用

答案:延长变量的生命周期,可以是函数外面访问函数内部的变量。

js面试题-----作用域与闭包

原文地址:http://www.cnblogs.com/diasa-fly/p/7485374.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved