日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js:进一步关闭(范围:下一个)

發(fā)布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js:进一步关闭(范围:下一个) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

function fn1(){
??//創(chuàng)建一個數(shù)組
??var fns = new Array();
??//i這個變量是保存在fn1這個作用域中
??for(var i=0;i<10;i++){
????//數(shù)組中的值是一組函數(shù)
????fns[i] = function(){
??????return i;?
????}?
??}
??return fns;
}

var fs = fn1();
for(var i=0;i<fs.length;i++){
??//此時通過閉包來調(diào)用全部的函數(shù),當(dāng)要輸出i的時候會在它所在的定義域(fn1)中找到它,
??//此時它已變?yōu)?0。所以連續(xù)輸出了10個10
??console.log(fs[i]());?
} //輸出:10

---------------------------解決方式------------------------------
function fn1(){
??//創(chuàng)建了一個數(shù)組
??var fns = new Array();
??//i這個變量是保存在fn1這個作用域中
??for(var i=0;i<10;i++){
????//num這個變量保存在tf作用域。每個閉包的num都是不一樣的
????//所以此時所消耗的內(nèi)存較大。
????var tf = function(num){
??????fns[num] = function(){
????????return num;?
??????}
????}
????tf(i);
??}
??return fns;
}

var fs = fn1();
for(var i=0;i<fs.length;i++){
??//
??console.log(fs[i]());?
} //輸出:0 ~ 9

---------------------------塊作用域------------------------------
for(var i=0;i<10;i++){
???
}
//在js中沒有塊作用域。無論是使用循環(huán)還是推斷之后,這個變量一直存在
/**
?* 所以當(dāng)在全局使用某個變量進行循環(huán)或推斷之后,這個變量可能會影響到函數(shù)的變量,所以
?* 所以在特殊情況下不要使用全局變量。并且全局變量在作用域鏈的最上層。訪問是最慢的。
?*/
console.log(i);
function fn1(){
??console.log(i);?
}
fn1();

/**
?* 在一個團隊進行開發(fā)中,可能會涉及到定義同名的全局變量,所以在開發(fā)中要養(yǎng)成一個好習(xí)慣:
?* 將全局變量代碼放到一個匿名函數(shù)。而且立即調(diào)用匿名函數(shù),這樣也能夠運行全局變量的代碼。
?* 可是這些變量被控制在開發(fā)者想要控制的作用域中。


?*/
解決的方法:將塊作用域定義在一個匿名函數(shù)中。
(function(){
??for(var i=0;i<10;i++){
???
??}??
})(); //在function的{}后不能直接調(diào)用。一定要加把匿名函數(shù)放在()內(nèi)再運行。

---------------------------私有變量------------------------------
function Person(name){
??/**
?? *此時沒有辦法直接訪問name這個屬性,由于沒有this.name,
?? *要訪問name僅僅能通過this.getName獲取。通過this.setName設(shè)置
?? */
??this.setName = function(value){
????name = value;
??}?
??this.getName = function(){
????return name;?
??}
}

var p = new Person("zhang"); //zhang
console.log(p.getName());
p.setName("li");
console.log(p.getName()); //li

/**可是使用這樣的方式創(chuàng)建私有變量帶來的問題是每一個對象要存儲大量函數(shù)。
?* 解決辦法是通過靜態(tài)私有變量來解決。
?*/
---------------------------解決方式------------------------------
var Person;
(function(){
??//name在函數(shù)結(jié)束之后就消失,在外面無法使用
??var name = "";
??Person = function(value){
????name = value;
??}
??Person.prototype.setName = function(value){
????name = value;
??}
??Person.prototype.getName = function(){
????return name;
??}
})();

var p1 = new Person("aaa"); //aaa
console.log(p1.getName());
p1.setName("bbb"); //bbb
console.log(p1.getName());

原創(chuàng)文章如轉(zhuǎn)載。請注明出處,本文首發(fā)于csdn站點:http://blog.csdn.net/magneto7/article/details/25459099

版權(quán)聲明:本文博客原創(chuàng)文章。博客,未經(jīng)同意,不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的js:进一步关闭(范围:下一个)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。