1. 程式人生 > >基礎的JavaScript函數

基礎的JavaScript函數

添加 upper .so ++ nor 字母 func var 內部

基礎的JavaScript函數

  • 1.首字母大寫
  • 2.去除數組重復項
  • 3.數組的排序
  • 4.閉包

1. 把用戶輸入的不規範的英文名字,變為首字母大寫,其他小寫的規範名字(使用JavaScript的map函數)

var arr = [‘A‘, ‘B‘, ‘C‘];
var r = arr.filter(function (element, index, self) {
    console.log(element); // 依次打印‘A‘, ‘B‘, ‘C‘
    console.log(index); // 依次打印0, 1, 2
    console.log(self); // self就是變量arr
    return
true; });
function normalize(arr) {
    return arr.map(function(item,index){
    item=item.slice(0, 1).toUpperCase()+item.slice(1).toLowerCase();
    return item;
    })
}
normalize([‘adam‘, ‘LISA‘, ‘barT‘]);

2. filter()接收的回調函數,其實可以有多個參數。通常我們僅使用第一個參數,表示Array的某個元素。回調函數還可以接收另外兩個參數,表示元素的位置和數組本身

var r;
var arr =
[‘apple‘, ‘strawberry‘, ‘banana‘, ‘pear‘, ‘apple‘, ‘orange‘, ‘orange‘, ‘strawberry‘]; r = arr.filter(function (element, index, self) { return self.indexOf(element) === index; });

3. sort()數組的排序

//這是排正序
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return -1;
    }
    if
(x > y) { return 1; } return 0; }); console.log(arr); // [1, 2, 10, 20] //這是排倒序 arr.sort(function (x, y) { if (x < y) { return 1; } if (x > y) { return -1; } return 0; });

4. 閉包

當一個函數返回了一個函數後,其內部的局部變量還被新函數引用。
返回的函數並沒有立即執行,而是直到f()才執行。

function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push(function () {
            return i * i;
        });
    }
    return arr;
}

var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];

在上面的例子中,每次循環,都創建一個新的函數,然後把創建的三個函數都添加到了一個Array中返回。
你可能認為調用f1(),f2()和f3()結果應該是1,4,9,但實際結果是:

f1(); // 16
f2(); // 16
f3(); // 16

全部都是16!原因就在於返回的函數引用了變量i,但它並非立刻執行。等到3個函數都返回時,它們所引用的變量i已經變成了4,因此最終結果為16。

返回閉包時牢記的一點就是:返回函數不要引用任何循環變量,或者後續會發生變化的變量。

如果一定要引用循環變量怎麽辦?方法是再創建一個函數,用該函數的參數綁定循環變量當前的值,無論該循環變量後續如何更改,已綁定到函數參數的值不變:

function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push((function (n) {
            return function () {
                return n * n;
            }
        })(i));
    }
    return arr;
}

var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];

f1(); // 1
f2(); // 4
f3(); // 9

基礎的JavaScript函數