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:实际开发中闭包的应用

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

时间: 2024-09-30 16:40:50

js面试题-----作用域与闭包的相关文章

JS中的作用域和闭包

作用域:在编程语言中,作用域控制着变量与参数的可见性及生命周期.JS确实有函数作用域,那意味着定义在函数中的参数和变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的. var a = 1; var fs = function (){ var b = 2; var c = 4 var fun = function (){ var c = 3; alert(a) //输出1 alert(b) //输出2 alert(c) //输出3 } fun(); } f

【 js 基础 】作用域和闭包

一.编译过程 常见编译性语言,在程序代码执行之前会经历三个步骤,称为编译. 步骤一:分词或者词法分析 将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元. 例子: var a = 2; 这一句通常被分解成为下面这些词法单元:var .a . = .2.; . 步骤二:解析或者语法分析 将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树.这个树被称为"抽象语法树"(Abstract Syntax Tree, AST) 例子: var .a . =

解析js中作用域、闭包——从一道经典的面试题开始

如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎么写,是不是这样? 可是结果呢,弹出来的都是10,为啥? var i,a for(i=0;i<10;i++){ a=document.createElement('a') a.innerHTML=i+'<br>' a.addEventListener('click',function(eve

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

问题: 1.说一下对变量提升的理解 2.说明this几种不同的使用场景 3.如何理解作用域 4.实际开发中闭包的应用 知识点: js没有块级作用域只有函数和全局作用域,如下代码: if(true){ var name='killua' //把name定义在块里和放在外面是一样的,等同于在外面声明一个变量name,在块内给name赋值 }//同等于下面的代码 //建议用下面方式写 var name if(true){ name='killua' } console.log(name) //打印出来

JS详细图解作用域链与闭包

JS详细图解作用域链与闭包 攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法直观的告诉你闭包在实际开发中的无处不在,但是我可以告诉你,前端面试,必问闭包.面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上. 可是为什么,闭包如此重要,还是有那么多人没有搞清楚呢?是因为大家不愿意学习吗?还真不是,

我不知道的js(一)作用域与闭包

作用域与闭包 作用域 什么是作用域 作用域就是一套规则,它负责解决(1)将变量存在哪儿?(2)如何找到变量?的问题 作用域工作的前提 谁赋予了作用域的权利?--js引擎 传统编译语言编译的过程 分词/词法分析:字符串 => 词法单元 var a=2; => var a = 2 ;(共5个单元) 解析/语法分析:词法单元流 => 抽象语法树(Abstract syntax tree,AST) 代码的生成: AST => 可执行代码(机器指令) js引擎编译的特点: 代码在执行前进行编

理解js中的作用域以及初探闭包

前言 对于js中的闭包,无论是老司机还是小白,我想,见得不能再多了,然而有时三言两语却很难说得明白,反正在我初学时是这样的,脑子里虽有概念,但是却道不出个所以然来,在面试中经常会被用来吊自己的胃口,考察基础,虽然网上自己也看过不少相关闭包的文章,帖子,但貌似这玩意,越看越复杂,满满逼格高,生涉难懂的专业词汇常常把自己带到沟里去了,越看越迷糊,其实终归结底,用杨绛先生的一句话就是:"你的问题在于代码写得太少,书读得不够多",其实在我看来前者是主要的,是后者的检验, 自知目标搬砖20年(还

js最基础知识回顾3(字符串拼接,数据类型,变量类型,变量作用域和闭包,运算符,流程控制,)

一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有兼容性问题     2.DOM:Document Object Model --------操作HTML的能力----document--------有一些兼容性问题     3.BOM:Browser Object Model -------------浏览器---------------wind

Node.js面试题:侧重后端应用与对Node核心的理解

Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. node开发技能图解 node 事件循环机制 起源 node正风生火起,很多介绍却停留在入门阶段,无法投入生产 node相关的高质量面试题更是少之又少,很难全面考查应聘者的node能力 许多文章在讲第三方类库,可是这些库质量差距较大,一旦遇到问题怎么办 必需的,全面了解node核心才能成为一名合格的node开发人员 目标与原则 前后端兼顾,更侧重