1. 程式人生 > >牛客網刷題筆記

牛客網刷題筆記

1.fn.call 以及fn.apply作用:

call, apply主要作用是改變函式賴以執行的作用域, 簡言之就是改變函式中this的指向.

用法:

fn.call(obj, args1, args2, ...); //obj是指定函式賴以執行的物件, arg1等是傳給函式的引數(假如有的話)

fn.apply(obj, [args1, args2, ...]); //obj是指定函式賴以執行的物件, [arg1, ...]等是傳給函式的引數陣列(假如有的話)

差別:

call和apply的差別就是引數的不同.

call中的引數必須是一個個列舉出來的.

apply中的引數必須是陣列

或者是arguments物件.

2.還有幾道題是關於正則表示式的,正則表示式有一些記不清楚了

下面列出用法連結

題目示例

給定字串 str,檢查其是否以母音字母結尾
1、母音字母包括 a,e,i,o,u,以及對應的大寫
2、包含返回 true,否則返回 false

function endsWithVowel(str) {
  return /[aeiou]$/i.test(str);
}
//首先確定母音集合[a,e,i,o,u],然後是以母音結尾,加上$,最後通配大小寫,加上i。
//因此正則表示式為:/[a,e,i,o,u]$/i,最後用test方法去檢測字串str

3.curry化

//柯里化是把接受多個引數的函式變換成接受一個單一引數(最初函式的第一個引數)的函式,
//並且返回接受餘下的引數且返回結果的新函式的技術。
//簡單理解題目意思,就是指,我們將預定義的函式的引數逐一傳入到curryIt中,當引數全部傳入之後,就執行預定義函式。
//於是,我們首先要獲得預定義函式的引數個數fn.length,然後宣告一個空陣列去存放這些引數。
//返回一個匿名函式接收引數並執行,當引數個數小於fn.length,則再次返回該匿名函式,繼續接收引數並執行,
//直至引數個數等於fn.length。
//最後,呼叫apply執行預定義函式。
function curryIt(fn) {
     //獲取fn引數的數量
     var n = fn.length;
     //宣告一個數組args
     var args = [];
     //返回一個匿名函式
     return function(arg){
         //將curryIt後面括號中的引數放入陣列
         args.push(arg);
         //如果args中的引數個數小於fn函式的引數個數,
         //則執行arguments.callee(其作用是引用當前正在執行的函式,這裡是返回的當前匿名函式)。
         //否則,返回fn的呼叫結果
         if(args.length < n){
            return arguments.callee;
         }else return fn.apply(this,args);
     }
 }