Javascript problem

近日要 support 一些 js program, 但小弟唔係太熟 js, 想請教大家.  

在 source code 中, 時常看到類似以下 coding:

var proj = proj || {};
(function () {
    var functA = function {
        var base = {};  // 這裡開始不明白.  getString declare 後又再 call 返
        base.getString = this.getString;
        this.getString = function () {
            var strings = base.getString.call($this);
            return strings.concat(["ab","cd","ef"]);
        };
    };
})();

1. 請問以上的程式是做甚麼?  
2. 這種模式的寫法, 有沒有特定的名稱 (如 closure, truly and falsy)

萬分感謝!

var base = {}; <-- declare base as JSON
base.getString = this.getString; <-- add this.getString to base

以上兩句, 如果一次過寫哂就係
var base = { getString: this.getString };

TOP

回覆 2# KinChungE

請問

    (function () {
    var functA = function {
        //do something
        };
    };
})();



function functA(){
  //do something
}

有咩分別?

TOP

  1. (function () {
  2.     var functA = function {
  3.         //do something
  4.         };
  5.     };
  6. })();
  7. alert(functA);
複製代碼
  1. function functA(){
  2.   //do something
  3. }
  4. alert(functA)
複製代碼
前者不留痕跡
回覆  KinChungE

請問

    (function () {
    var functA = function {
        //do something
       ...
gamezz 發表於 2014-7-16 23:44

TOP

本帖最後由 FlyingForever 於 2014-7-17 15:25 編輯

你比段Source Code似乎有D問題喎……
  1. var proj = proj || {}; // 唔關事
  2. (function () {
  3.     var functA = function() {  // 原版漏括孤
  4.         var base = {};
  5.         base.getString = this.getString;
  6.         this.getString = function () {
  7.             var strings = base.getString.call(this); // 應該係就咁this而唔係原版既$this?但Google又好似真係有$this既用法……
  8.             return strings.concat(["ab","cd","ef"]);
  9.         };
  10.     };
  11. })();
複製代碼
Run完之後咩都唔會發生
因為個function係自己既function scope入面define左一個variable functA
但define完之後咩都冇做過,個function就結束左
由於functA只係係function scope入面,所以function外面根本call唔到佢
正如以下既寫法:
  1. (function() {
  2.     var i = 10;
  3. })();
複製代碼
係完全同冇做野一樣……

睇返入面段Code,functA係擴展緊this.getString
(唔好問我個this點黎,我都望唔透,請其他師兄指點……)
首先將this.getString呢個function複製一份,變成base.getString
然後this.getString改寫成「call返base.getString,之後再作修改」
咁由於base.getString係原版既this.getString,所以實際上係對this.getString進行擴展

TOP

你比段Source Code似乎有D問題喎……Run完之後咩都唔會發生
因為個function係自己既function scope入面defi ...
FlyingForever 發表於 2014-7-17 01:11


(function() {})();代表document ready後先開始做
但係留意, 括號入面declare左既野, 出面拎唔翻

TOP

google "Self Invoked Anonymous Function" & "Immediately-Invoked Function Expression" yourself

TOP

回覆 6# KinChungE


    This is not correct. What you stated is for jquery only and with a "$" at the beginning.

TOP

回覆 6# KinChungE
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>immediate function test</title>
  6. </head>
  7. <body>
  8. <script>
  9. (function() {
  10.     alert(document.getElementById("test"));
  11. })();
  12. </script>
  13. <div id="test"></div>
  14. </body>
  15. </html>
複製代碼
結果alert既係null
如果將script放係div後面,就會出DOM Object

TOP

回覆  KinChungE 結果alert既係null
如果將script放係div後面,就會出DOM Object
FlyingForever 發表於 2014-7-17 19:41


記錯野添
即係呢個做法純綷用黎避免撞variable name?

TOP