天天看點

【前端js】算法全歸納(五)函數:前端函數常用算法一、函數作用域

文章目錄

  • 一、函數作用域
    • 1.修改函數的this的指向,并執行這個函數
    • 2.修改函數的this的指向,并傳回這個函數

題目來源于牛客網前端專題:

https://www.nowcoder.com/ta/front-end?page=1

https://www.nowcoder.com/ta/js-assessment

一、函數作用域

(結合

bind,call,apply

方法),手動改變this的指向

1.修改函數的this的指向,并執行這個函數

題目描述

将函數 fn 的執行上下文改為 obj,傳回 fn 執行後的值

原題:https://www.nowcoder.com/practice/dfcc28bf243642b795eaf5a2a621acc5?tpId=6&tqId=10985&tPage=2&rp=2&ru=/ta/js-assessment&qru=/ta/js-assessment/question-ranking

如果使用bind,需要将bind以後的函數立即執行

//主要有三種答案。
function alterContext(fn, obj) {
  return fn.bind(obj)();//.bind()傳回的是一個函數,是以需要立即執行。 }
 
function alterContext(fn, obj) {
  return fn.call(obj);
}
 
function alterContext(fn, obj) {
  return fn.apply(obj);
}
           

2.修改函數的this的指向,并傳回這個函數

題目描述

封裝函數 f,使 f 的 this 指向指定的對象

function bindThis(f, oTarget) {
    if (f.bind){//判斷是否支援bind方法
        return f.bind(oTarget);//傳回bind函數
    } else {//不支援bind方法
        return function(){//因為call/apply會立即執行,是以要加一個匿名函數,兩層return
            return f.call(oTarget,arguments);
        }
    }
}
           
上一篇: comet研究

繼續閱讀