變量姻氨,作用域钓辆,內(nèi)存問題

基本類型和引用類型

  • 基本類型是簡單的數(shù)據(jù)段,引用類型是指那些由多個值構(gòu)成的對象
    基本類型: undefined肴焊,Null前联,Boolean, Number , String
    引用類型: 值是保存在內(nèi)存對象中,js不允許直接訪問內(nèi)存中的位置娶眷,不能直接操作對象的內(nèi)存空間似嗤,在操作對象時,實際上操作對象的引用而不是實際的對象

動態(tài)屬性

var person = new Object();   // 創(chuàng)建對象保存到person的變量中
person.name = "dan";         //  為該對象ng添加一個name 屬性
alert(person.name)           //  訪問該屬性
//  對象不被銷毀或者這個屬性不被刪除届宠,這個屬性將會一直存在

復(fù)制變量值

  • 基本數(shù)據(jù)類型烁落,復(fù)制值后,是兩個單獨的變量豌注,引用類型復(fù)制后伤塌,實際上,兩個變量將引用同一個對象轧铁。因此每聪,改變其中一個值后,另一個值也發(fā)生改變
var arr1 = [1,2,3,4];
var arr2 = arr1;
arr2.push(5);
console.log(arr1);   // [1,2,3,4,5]


var obj1 = new Object();
var obj2 = obj1;
obj1.name = 'dan';
console.log(obj2.name)  // dan
function f1(){
    alert(1);
}
var f2 = f1;
function f2(){
    alert(2);
}
f2();  alert(1)
// 這里js編譯齿风,首先會編譯function药薯,后再執(zhí)f2,所以alert(1)

傳遞參數(shù)

  • 函數(shù)中,變量作為參數(shù)都是按值傳遞的
function addTen(num){
    num += 10;
    return num;
}
var count = 20;
var result = addTen(count);
console.log(count);  // 20    函數(shù)操作對外部值并沒有影響
console.log(result);  //  30
function setName (obj){
    obj.name = 'dan';
    obj = new Object();
    obj.name = 'zhu';
}
var person = new Object();
setName (person);
console.log(person.name);  // dan
var num = 1;
function add(num) {
    num = num + 1
    console.log(num)  // 2
}
add(num);
console.log(num);   // 1 參數(shù)是按值的傳遞救斑,函數(shù)操作對外部值沒有影響

var num2 = 2;
function add2(){
    num2 = num2 + 1;
}
add2();
console.log(num2);    // 3   函數(shù)訪問了全局變量童本,對全局變量進(jìn)行了修改

var person = new Object();
function name(obj){
    obj.name = 'dan';
}
name(person);
console.log(person.name);

function setName (obj){
    obj.name = 'dan';
    obj = new Object();
    obj.name = 'zhu';
}
var person = new Object();
setName (person);
console.log(person.name);  // dan   引用類型也不是按引用傳遞的,也是按值傳遞的

檢測類型

  • typeof 確定一個變量是字符串脸候,數(shù)值穷娱,布爾值,還是undefined的最佳工具纪他,如果變量是對象鄙煤,或者是Null晾匠,則會返回object茶袒;
var n = null;
var o = new Object();
console.log( typeof n);  // object
console.log(typeof o);   // object
  • 如果對象是引用類型時,那么用instanceof 操作符
console.log( person instanceof Object)   //
console.log( colors instanceof Array)    // 變量是Array  => true or false
console.log( pattern instanceof RegExp )  // 變量是否為正則   => true or false 

執(zhí)行環(huán)境及作用域

  • 內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境凉馆,但是外部環(huán)境不能訪問內(nèi)部環(huán)境中任何變量和函數(shù)
  • 延長作用域
    • try-catch語句
var array = null;
try{
  console.log(array[0])       // 這里并不會報錯
}catch(error){
  console.log(error)   // 取到catch中的錯誤信息
}finally{
  alert('null is object')
}
try{
        let i = 10;
        console.log(array[0])
    }catch(error){
        console.log(i)   // 10
    }
    console.log(i)      // i is not defined

try{
        var i = 10;
        console.log(array[0])    
    }catch(error){
        console.log(i)   // 10
    }
    console.log(i)      // 10
  • with 語句
function Lakers(){
    this.name = 'dan';
    this.age = '25';
    this.gender = 'boy';
}
var people=new Lakers();  
with(people)    // 拿到people的信息
{  
       var str = "姓名: " + name + "<br>";  
       str += "年齡:" + age + "<br>";  
       str += "性別:" + gender;  
       document.write(str);  
} 
console.log(str)    // 在with之外也可以得到str的值

沒有塊級作用域

  • if 語句中的變量聲明將變量添加到當(dāng)前的執(zhí)行環(huán)境中
if (true){
    var color = 'blue';   // color 添加到全局的環(huán)境
}
consolr.log(color)
  • 由for語句創(chuàng)建的變量i即使再for循環(huán)執(zhí)行后薪寓,也依舊存在于循環(huán)外部的執(zhí)行環(huán)境中
for ( var i = 0; i < 10 ; i ++){
    ...
}
console.log(i)  // i = 11

變量聲明

  • 使用var聲明的變量將會自動添加到最接近的環(huán)境中亡资,如果變量沒有用var聲明,該變量會自動添加到全局變量中
function add(num1,num2){
    var sum = num1 + num2;
    return sum;
}
var result = add(10,20);  // 30
console.log(sum);   // sum is not defind


function add (num1,num2){
    sum = num1 + num2;
    return sum;
}
var result = add(10,20);
console.log(sum);   // 30

查詢標(biāo)識符

var color = 'blue';
function getColor(){
    return color;
}
console.log(getColor())  // blue

var color = 'blue';
function getColor(){
    var color = 'red';  
    // window.color 訪問全局變量
    return color;
}
console.log(getColor())  // red

垃圾收集

  • 局部變量只在函數(shù)執(zhí)行的過程中存在
  • 全局變量在內(nèi)存上分配相應(yīng)的空間

標(biāo)記清除

引用計數(shù)

管理內(nèi)存

function createPerson(name){
    var localPerson = new Object();
    localPerson.name = name;
    return localPerson;
}
var globalPerson = createPerson('dan');
....使用
globalPerson = null;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末向叉,一起剝皮案震驚了整個濱河市锥腻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌母谎,老刑警劉巖瘦黑,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奇唤,居然都是意外死亡幸斥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門咬扇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甲葬,“玉大人,你說我怎么就攤上這事懈贺【眩” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵梭灿,是天一觀的道長画侣。 經(jīng)常有香客問我,道長堡妒,這世上最難降的妖魔是什么棉钧? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮涕蚤,結(jié)果婚禮上宪卿,老公的妹妹穿的比我還像新娘。我一直安慰自己万栅,他們只是感情好佑钾,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烦粒,像睡著了一般休溶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扰她,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天兽掰,我揣著相機與錄音,去河邊找鬼徒役。 笑死孽尽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忧勿。 我是一名探鬼主播杉女,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瞻讽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熏挎?” 一聲冷哼從身側(cè)響起速勇,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坎拐,沒想到半個月后烦磁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哼勇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年个初,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猴蹂。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡院溺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磅轻,到底是詐尸還是另有隱情珍逸,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布聋溜,位于F島的核電站谆膳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撮躁。R本人自食惡果不足惜漱病,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望把曼。 院中可真熱鬧杨帽,春花似錦、人聲如沸嗤军。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叙赚。三九已至老客,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間震叮,已是汗流浹背胧砰。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苇瓣,地道東北人尉间。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乌妒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 基本類型和引用類型 js中變量類型分為兩大類侦啸。基本類型和引用類型丧枪」馔浚基本類型指值直接保存在變量本地的類型。引用類型變...
    言大大freedom閱讀 328評論 0 0
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品拧烦,去做同樣的事情忘闻,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,718評論 2 17
  • 這大半年恋博,出差的次數(shù)比以往三年都多齐佳,有了些些小感觸。 一句話總結(jié):高高興興出差债沮,平平安安回家炼吴。 細(xì)細(xì)道來的話,有三...
    Thinkpolo閱讀 251評論 0 1
  • 清早疫衩,跟著朋友去上瑜伽課硅蹦。 天吶,沒把我折騰死闷煤。只是蹲起彎曲折疊舒展童芹,硬骨頭把皮肉支楞痛了。渾身打開水龍頭鲤拿,鏡子里...
    周湘泉閱讀 69評論 4 4
  • 本兮久锥,陪伴大多數(shù)90后度過叛逆期,度過中學(xué)時代的歌手去世了异剥。 本兮瑟由,原名馬曉晨,1994年6月30日出生于新疆奎屯...
    辣八辣八閱讀 1,544評論 0 2