基礎的JavaScript函數

來源:互聯網
上載者:User

標籤:第一個   重複   gpo   去除   依次   blog   lock   map   怎麼辦   

基礎的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(); // 16f2(); // 16f3(); // 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(); // 1f2(); // 4f3(); // 9

基礎的JavaScript函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.