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

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

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

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

为了说明 JS 面试的复杂性,首先,请尝试给出以下结果:

  1. onsole.log(2.0 == “2” == new Boolean(true) == “1”) 

十有八九的会给出false, 其实运行结果是true,原因请看 这里。

1) 理解 JS 函数

函数是 JavaScript 的精华,是 JS 一等公民。JS 函数不仅仅是一个普通的函数,与其他语言不同,JS 函数可以赋值给变量,作为参数传递给另一个函数,也可以从另一个函数返回。

  1. console.log(square(5));  
  2. /* ... */  
  3. function square(n) { return n * n; }  

以为代码很简单,大家应该都知道会打印:25。接着看一个:

  1. console.log(square(5));  
  2. var square = function(n) {  
  3. return n * n;  
  4. }  

乍一看,你可能会忍不住说也打印了 25。但很不幸,会报错:

  1. TypeError: square is not a function 

在 JavaScript 中,如果将函数定义为变量,变量名将被提升,是 JS 执行到它的定义才能被访问。

你可能在一些代码中频繁的见到如下代码。

  1. var simpleLibrary = function() { 
  2.    var simpleLibrary = { 
  3.         a, 
  4.         b, 
  5.         add: function(a, b) { 
  6.             return a + b; 
  7.         }, 
  8.         subtract: function(a, b) { 
  9.             return a - b;    
  10.         } 
  11.    } 
  12.   return simpleLibrary; 
  13. }();  

为什么会做这种奇怪的事情? 这是因为一个函数变量中变量和函数被分装,可以避免全局变量污染。 JQuery 到Lodash 的库采用这种技术提供 $、_ 等

2) 理解 bind、apply 和 call

你可能在所有常用库中看到过这三个函数。它们允许局部套用, 我们可以把功能组合到不同的函数。一个优秀的js开发者可以随时告诉你关于这三个函数。

基本上,这些是改变行为以实现某些功能的原型方法,根据 JS 开发人员 Chad 的说法,用法如下:

希望使用某个上下文调用该函数,请使用 .bind() ,这在事件中很有用。 如果要立即调用函数,请使用.call() 或 .apply(),并修改上下文。

举例说明

让我们看看上面的陈述是什么意思! 假设你的数学老师要求你创建一个库并提交。你写了一个抽象的库,它可以求出圆的面积和周长:

  1. var mathLib = { 
  2.     pi: 3.14, 
  3.     area: function(r) { 
  4.         return this.pi * r * r; 
  5.     }, 
  6.     circumference: function(r) { 
  7.         return 2 * this.pi * r; 
  8.     } 
  9. };  

提交后,老师调用了它:

  1. mathLib.area(2);  
  2. 12.56  

老师发现他给你要求是 pi 精确到小数点后 5 位数而你只精确到 2 位, 现在由于最后期限已过你没有机会提交库。 这里 JS的 call 函数可以帮你, 只需要调用你的代码如下:

  1. mathLib.area.call({pi: 3.1.159}, 2) 

它会动态地获取新的 pi 值,结果如下:

  1. 12.56636 

这时,注意到 call 函数具有两个参数:

  • Context
  • 函数参数

在 area 函数中, 上下文是对象被关键词 this 代替,后面的参数作为函数参数被传递。 如下:

  1. var cylinder = { 
  2.     pi: 3.14, 
  3.     volume: function(r, h) { 
  4.         return this.pi * r * r * h; 
  5.     } 
  6. };  

(编辑:上海站长网)

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