国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【譯】stackoverflow 關于JavsScript的熱門問答

趙春朋 / 495人閱讀

摘要:例如,考慮比較由字符串構造函數創建的字符串對象和字符串字面量這里的操作符正在檢查這兩個對象的值并返回,但是鑒于它們不是相同類型并且返回。我的建議是完全繞過這個問題,只是不使用字符串構造函數創建字符串對象。

Q1:javascript的閉包是如何工作的?

正如愛因斯坦所說的:

如果你不能把它解釋給一個六歲的小孩,說明你對它還不夠了解。

我曾嘗試向一個27歲的朋友解釋js閉包并且完全失敗了。你會如何向一個有概念(例如,函數,變量等)的人解釋,來彌補閉包知識,但不理解閉包本身?

Answers:

無論何時你看到function關鍵字在另一個函數內部,那么內部函數將可訪問外部函數的變量。

function foo(x) {
  var tmp = 3;

  function bar(y) {
    alert(x + y + (++tmp)); // will alert 16
  }

  bar(10);
}

foo(2);



這將總是彈出16,因為函數bar 可以訪問變量 x ,它是作為foo參數定義的,也可以訪問變量tmp

這就是一個閉包。函數沒有任何返回的時候就被稱為閉包。簡單地訪問即時詞法作用域(immediate lexical scope)外的變量創建了一個閉包。

function foo(x) {
  var tmp = 3;

  return function (y) {
    alert(x + y + (++tmp)); // will also alert 16
  }
}

var bar = foo(2); // bar is now a closure.
bar(10);

上面的函數也會彈出16,因為 bar 仍然可以指向 xtmp,即使它不再直接范圍內。

然而,因為 tmp 仍然在bar的閉包內部閑逛,它也正在增加。每次你調用bar的時候它會被增加。
最簡單的閉包的例子是這個:

var a = 10;
var b = 6;

function test() {
  console.log(a); // will output 10
  console.log(b); // will output 6
}

test();

當一個js函數被調用的時候,一個新的執行上下文環境就被創建了。函數參數和父對象一起,這個執行上下文也接收所有的外部聲明的變量(在上面的例子,"a""b" 都是)

創建多個閉包函數是可能的,或者通過返回他們的列表,或者通過設置他們的全局變量。所有這些將指向同上面的xtmp,他們不會拷貝他們本身。

這里的數字 x 是字面量的數字。和js其他字面量一樣,當foo被調用,數字 x 就被復制到 foo 內作為它的 參數 x

另一方面,當處理對象的時候,js總會使用引用。如果說,你用一個Object來調用foo,閉包將會返回最早引用的Object

function foo(x) {
  var tmp = 3;

  return function (y) {
    alert(x + y + tmp);
    x.memb = x.memb ? x.memb + 1 : 1;
    alert(x.memb);
  }
}

var age = 2;
var bar = foo(age); // bar is now a closure referencing age.
bar(10);


果然,每次調用bar(10)都將增加x.memb。這也許不是所預期的,x僅僅是指向同樣的對象 作為age變量!經過幾次調用bar之后,age.memb將是2!這是與HTML對象引用的內存泄漏的基礎

原文鏈接:http://stackoverflow.com/ques...

Q2:我如何使用jQuery做一個重定向頁面?

jQuery是沒有必要的,并且window.location.replace(...)將最佳模擬HTTP重定向。
這比使用window.location.href =要好,因為replace()并不把起始頁放入會話歷史(session history)里,這意味著用戶不會陷入永無休止的后退按鈕的窘境。如果你想要模擬人點擊一個鏈接,請使用location.href。如果要模擬一個HTTP重定向,使用location.replace。

例如:

// 類似HTTP重定向的行為 
window.location.replace("http://stackoverflow.com");

// 類似點擊一個鏈接的行為 
window.location.;

原文鏈接:http://stackoverflow.com/ques...

Q3:測試是否有東西被隱藏 問題描述:
在jQuery中,可以切換元素的可見性,使用方法.hide(), .show() 或者.toggle().

使用jQuery,你如何測試一個元素是可見的還是隱藏的? 
Best Answers:

因為這個問題是指一種單一的元素,所以該代碼可能更適合:

// 檢查display:[none|block], 忽略 visible:[true|false]
$(element).is(":visible"); 
Other Answers:

你可以使用hidden選擇器:

// 匹配的是隱藏的所有元素
$("element:hidden")

visible選擇器:

// 匹配所有可見的元素
$("element:visible")

問題鏈接:http://stackoverflow.com/ques...

Q4:"use strict"在js中的作用是什么,其背后的思考是什么? 問題描述:

最近,我運行我的一些JavaScript代碼通過CrockfordJSLint的,它給了以下錯誤:

Problem at line 1 character 1: Missing "use strict" statement.

做了一些搜索,我意識到是有些人添加了“use strict”到他們的JavaScript代碼中。有一次,我添加了該聲明,錯誤就停止出現了。不幸的是,谷歌并沒有透露太多這字符串聲明的歷史的背后。當然,它一定和javascript如何被瀏覽器解析有關系,但我不知道效果會怎樣。

那么,什么是"use strict";所有和它仍然相關聯的涵義是什么?

當前任何瀏覽器是否對"use strict"做出反應;該字符串或是在將來做使用?

Best Answers:

這篇文章也許對你有幫助:

John Resig - ECMAScript 5 Strict Mode, JSON, and More

引用一些有趣的部分:

    嚴格模式是`ECMAScript 5`中的一項新特征,允許你把一段程序或功能放置在"strict"工作環境中。這種嚴格上下文環境防止某些行為被采取并引發更多的異常。

并且:

嚴格的模式有助于幾個方面:

    它捕獲了一些常見的編碼錯誤,拋出異常。
    它阻止,或拋出錯誤,當相對“不安全”的行為被采用(例如獲取全局對象)。 
    它禁用那些混淆的或者考慮不周的特征

另外請注意,你可以在整個文件中申請嚴格模式...或者你可以僅在特定的函數中使用它(仍然是引用John Resig 的文章):

// 非嚴格的代碼...

(function(){
  "use strict";

  // 嚴格定義你的庫...
})();

// 非嚴格的代碼

如果你有混合使用新舊代碼,它可能會有所幫助;-)

所以,我認為這是一個有點像"use strict",你可以在Perl(因此得名?)中使用:它通過檢測更多可能導致破壞的事情來幫助你少犯錯誤。

原文鏈接:http://stackoverflow.com/ques...

Q5:如何檢測一個字符串包含另一個子字符串? 問題描述:

javascript中,我如何檢測一個字符串包含另一個子字符串。通常我會想到String.contains()方法,但似乎沒有一個。

Best Answers:

indexOf返回一個字符串在其他字符串中的位置。如果沒找到,它會返回-1

 var s = "foo";
 alert(s.indexOf("oo") > -1);

原文地址:http://stackoverflow.com/ques...

Q6:我如何在JavaScript中獲得查詢字符串的值? 問題描述:

是否有一個通過jQuery無插件查詢字符串值的方式(或者沒有)。
如果是,怎么做?如果不是,是否有一款可以這么做的插件?

Best Answers:

你不需要通過jQuery就可以達到那個目的。你可以僅僅使用純javascript

function getParameterByName(name) {
    name = name.replace(/[[]/, "[").replace(/[]]/, "]");
    var regex = new RegExp("[?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/+/g, " "));
}

用法:

var prodId = getParameterByName("prodId");

問題鏈接:http://stackoverflow.com/ques...

Q7:var functionName = function() {} vs function functionName() {} 問題描述:

我最近開始維護別人的JavaScript代碼。我修復bug,增加功能,也試圖整理代碼并使其更加一致。

之前的開發人員使用兩種函數聲明方式,我無法弄清是否這背后有或沒有解決的原因。

兩種方法是:

var functionOne = function() {
    // Some code
};

function functionTwo() {
    // Some code
}

使用這兩種不同方法的原因是什么,以及各自的利弊是什么?

Best Answers:

所不同的是functionOne被定義在運行時,而functionTwo被限定在分析時的腳本塊。例如:




這也意味著在嚴格的模式下,你不能有條件地使用第二語法定義函數:


如果沒有"use strict"這將不會導致一個錯誤 并且 functionThree 將被定義無關test的值。

原文鏈接:http://stackoverflow.com/ques...

Q8:JavaScript 中應該用 "==" 還是 "==="? 問題描述:

我用JSLint來檢查javascript,當我在做類似比較idSele_UNVEHtype.value.length == 0的時候,接著它返回許多建議用===(三個等號)來替換==(兩個等號)

===來取代==是否有性能優勢?

當有許多比較操作符存在的時候,任何性能的改進都將很受歡迎。

如果沒有類型轉換發生,性能會超過== ?

Best Answers:

恒等式(===)操作符

參考文獻:JavaScript教程:比較運算符

==操作符在做任意按需類型轉換后將比較相等性,而===操作符并不會, ===運算符將不做轉換,所以如果兩值不一樣類型===將返回false。這種情況下,===將更快,并可能比==返回不同的結果。在所有其他情況下的性能都是一樣的。

引用 Douglas Crockford 的JavaScript: The Good Parts

javascript擁有兩套等性運算符: `===`和`!==`,和他們邪惡的雙胞胎 `==`和`!=`。好的那一個會按你所期望的方式工作。如果兩個操作數是相同的類型,具有相同的值,那么`===`產生`true`,`!==`產生`false`。當操作數具有相同類型時,邪惡雙胞胎做正確的事,但是如果他們是不同類型,它們試圖強制值。他們這么做的規格是復雜難記的,這里有一些有趣的例子:

"" == "0"           // false
0 == ""             // true
0 == "0"            // true

false == "false"    // false
false == "0"        // true

false == undefined  // false
false == null       // false
null == undefined   // true

" 	
 " == 0     // true

我的建議是不要使用邪惡的雙胞胎。相反,總是用===!==。所有的比較只是產生虛假的= = =運算符。用===操作符的所有的比較僅顯示false

更新:

var a = [1,2,3];
var b = [1,2,3];

var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };

var e = "text";
var f = "te" + "xt";

a == b            // false
a === b           // false

c == d            // false
c === d           // false

e == f            // true
e === f           // true

特殊情況下,當你比較字面量和對象的時候,考慮到它的toString或者valueOf方法。例如,考慮比較由字符串構造函數創建的字符串對象和字符串字面量

"abc" == new String("abc")    // true
"abc" === new String("abc")   // false

這里的== 操作符正在檢查這兩個對象的值并返回true,但是鑒于它們不是相同類型并且===返回false。哪一個是正確的?這實際上取決于你想要比較什么。我的建議是完全繞過這個問題,只是不使用字符串構造函數創建字符串對象。

參考: http://www.ecma-international...

原文鏈接:http://stackoverflow.com/ques...

Q9:克隆一個對象的最有效的方法是什么? 問題描述

克隆一個js對象的最有效的方法是什么?我已經見過obj = eval(uneval(o));被使用,但是目前僅有Firefox支持。在 Mootools 1.2,我已經做了類似obj = JSON.decode(JSON.encode(o));的事情,但是存在效率問題

我也見過遞歸復制功能的各種缺陷。我很驚訝,沒有規范的解決方案存在。

Best Answers:

注:這是另一個答復,沒有對這個問題作出恰當的回應。如果你希望快速復制一個對象請參考:[Corban"s advice in his
answer][4] 他對這個問題的回答。

我想指出,jQuery中的.clone()方法只克隆DOM元素。為了克隆JavaScript對象,你需要這么做:

// 淺拷貝
var newObject = jQuery.extend({}, oldObject);

// 深拷貝
var newObject = jQuery.extend(true, {}, oldObject);

更多信息請參考:http://api.jquery.com/jQuery....

我還想指出,深拷貝其實比上面所示聰明得多 - 它是能夠避免很多陷阱(例如,想深擴展DOM元素)。它被頻繁地用于jQuery的核心并且在插件里也有重大的作用

Other answers:

似乎沒有一個內置的方法,你可以嘗試:

function clone(obj) {
    if(obj == null || typeof(obj) != "object")
        return obj;

    var temp = obj.constructor(); // changed

    for(var key in obj) {
        if(obj.hasOwnProperty(key)) {
            temp[key] = clone(obj[key]);
        }
    }
    return temp;
}

原文鏈接:http://stackoverflow.com/ques...

Q10:如何從一個JavaScript對象中刪除一個屬性 問題描述:

我是這么創建一個對象的:

var myJSONObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};

new myJSONObject結束的移除屬性regex的最好方法是什么?

var myJSONObject = {"ircEvent": "PRIVMSG", "method": "newURI"};
Best Answers:
delete myJSONObject.regex;
// or,
delete myJSONObject["regex"];
// or,
var prop = "regex";
delete myJSONObject[prop];

參考:understanding delete

Other Answers:
var myJSONObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};

delete myJSONObject.regex;

alert ( myJSONObject.regex); // alerts: undefined

這種方法在火狐和IE下起作用,我個人認為在其他瀏覽器也起作用

問題鏈接:http://stackoverflow.com/ques...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85570.html

相關文章

  • [] Node.js 架構概覽

    摘要:文件系統請求和相關請求都會放進這個線程池處理其他的請求,如網絡平臺特性相關的請求會分發給相應的系統處理單元參見設計概覽。 譯者按:在 Medium 上看到這篇文章,行文脈絡清晰,闡述簡明利落,果斷點下翻譯按鈕。第一小節背景鋪陳略啰嗦,可以略過。剛開始我給這部分留了個 blah blah blah 直接翻后面的,翻完之后回頭看,考慮完整性才把第一節給補上。接下來的內容干貨滿滿,相信對 N...

    antyiwei 評論0 收藏0
  • java篇

    摘要:多線程編程這篇文章分析了多線程的優缺點,如何創建多線程,分享了線程安全和線程通信線程池等等一些知識。 中間件技術入門教程 中間件技術入門教程,本博客介紹了 ESB、MQ、JMS 的一些知識... SpringBoot 多數據源 SpringBoot 使用主從數據源 簡易的后臺管理權限設計 從零開始搭建自己權限管理框架 Docker 多步構建更小的 Java 鏡像 Docker Jav...

    honhon 評論0 收藏0
  • 整理一些質量不錯教程、博客、論壇

    摘要:可是雖然搜出來的比好,但是也還是不能確保質量都是沒問題的。下面我想整理一些不錯的資源,方便自己的學習和討論。實踐是檢驗真理的唯一標準上有足夠多的高質量的開源項目。這里是我整理的關于使用的方便快速查看的筆記。 歡迎大家也來推薦好的資源?。。?! 為什么整理這篇文章 想通過在網絡上隨便搜索出來的文章學習其實是很不明智的,往往不能保證知識的質量、全面性和系統性。甚至是粗制濫造、造假的所謂知識!...

    techstay 評論0 收藏0
  • 分享一個關于匿名函數和閉包問答

    摘要:引用一個的提問個人覺得總結的比較好的兩句話原文地址另外,附上中對閉包的講解閉包中文對于閉包的簡要概括原文原文地址匿名函數和閉包來自文章作者版權聲明自由轉載非商用非衍生保持署名創意共享許可證轉載請注明出處 引用一個stackoverflow的提問 個人覺得總結的比較好的兩句話: An anonymous function is just a function that has no na...

    Barrior 評論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設計模式力薦深度好文深入理解大設計模式收集各種疑難雜癥的問題集錦關于,工作和學習過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內存管理。 延遲加載 (Lazyload) 三種實現方式 延遲加載也稱為惰性加載,即在長網頁中延遲加載圖像。用戶滾動到它們之前,視口外的圖像不會加載。本文詳細介紹了三種延遲加載的實現方式。 詳解 Javascript十大常用設計模式 力薦~ ...

    caikeal 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<