加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Javascript面试的完美指南(开发者视角)

发布时间:2019-02-22 09:05:56 所属栏目:建站 来源:前端小智
导读:副标题#e# 为了说明 JS 面试的复杂性,首先,请尝试给出以下结果: onsole.log(2.0==2==newBoolean(true)==1) 十有八九的会给出false, 其实运行结果是true,原因请看 这里。 1) 理解 JS 函数 函数是 JavaScript 的精华,是 JS 一等公民。JS 函数不仅仅是一

Apply 类似,只是函数参数作为数组传递。

  1. cylinder.volume.apply({pi: 3.14159}, [2, 6]);  
  2. 75.39815999999999 

如果你会使用 call 你基本就会用 apply 了,反之亦然, 那 bind 的用法又是如何呢 ?

bind 将一个全新的 this 注入到指定的函数上,改变 this 的指向, 使用 bind 时,函数不会像 call 或 apply 立即执行。

  1. var newVolume = cylinder.volume.bind({pi: 3.14159});  
  2. newVolume(2,6); // Now pi is 3.14159  

bind 用途是什么?它允许我们将上下文注入一个函数,该函数返回一个具有更新上下文的新函数。这意味着这个变量将是用户提供的变量,这在处理 JavaScript 事件时非常有用。

3) 理解 js 作用域(闭包)

JavaScript 的作用域是一个潘多拉盒子。从这一个简单的概念中,就可以构造出数百个难回答的面试问题。有三种作用域:

  • 全局作用域
  • 本地/函数作用域
  • 块级作用域(ES6引进)

全局作用域事例如下:

  1. x = 10; 
  2. function Foo() { 
  3.   console.log(x); // Prints 10 
  4. Foo()  

函数作用域生效当你定义一个局部变量时:

  1. pi = 3.14; 
  2. function circumference(radius) {     
  3.      pi = 3.14159; 
  4.      console.log(2 * pi * radius); // 打印 "12.56636" 不是 "12.56" 
  5. circumference(2);  

ES16 标准引入了新的块作用域,它将变量的作用域限制为给定的括号块。

  1. var a = 10;  
  2. function Foo() { 
  3.   if (true) { 
  4.     let a = 4; 
  5.   } 
  6.  
  7.   alert(a); // alerts '10' because the 'let' keyword 
  8. Foo();  

函数和条件都被视为块。以上例子应该弹出 4,因为 if 已执行。但 是ES6 销毁了块级变量的作用域,作用域进入全局。

现在来到神奇的作用域,可以使用闭包来实现,JavaScript 闭包是一个返回另一个函数的函数。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读