JS練習(xí)題1

1. 作用域問題+變量提升

  1. 函數(shù)內(nèi)部有var n引颈,外部無法訪問函數(shù)私有變量n联四。
var n1 = 55;
var n2 = 56;  //經(jīng)過func()后被修改為300
function func(n, n1){
    //變量提升,相當(dāng)于
    //var n = 55;
    //var n1 = 56;
    n = 300;
    n1 = 300;
    n2 = 300; //內(nèi)部沒有定義n2, 會訪問全局
}
func(n1, n2);
console.log(n1);  //輸出55
console.log(n2);  //n2在函數(shù)內(nèi)部被修改,變?yōu)?00
console.log(n);   //函數(shù)內(nèi)部定義過n,外部無法訪問叹话,故報(bào)錯(cuò)
  1. 函數(shù)內(nèi)部無var n 偷遗,所以執(zhí)行 func(n, n1)n是全局變量。
var n1 = 55;
var n2 = 56;
function func(n1, n2){
    //變量提升驼壶,相當(dāng)于
    //var n1 = 55;
    //var n2 = 56;
    n = 300;  //函數(shù)內(nèi)部不使用var聲明的變量氏豌,實(shí)際上變成了全局變量,不過需要執(zhí)行func()
    n1 = 300;
    n2 = 300; 
}
func(n1, n2);
console.log(n1);  //輸出55
console.log(n2);  //輸出56
console.log(n);   //輸出300
  1. 引用傳遞热凹。
    • 棧內(nèi)存:基本類型變量
    • 堆內(nèi)存:對象變量
function Person(name, age, salary){
    this.name = name;
    this.age = age;
    this.salary = salary;
}
function f(person){
    person.name = "小明";  //person指向第一個(gè)Person
    person = new Person("小紅", 19, 20000);  //person指向新的Person
}
var p = new Person("小強(qiáng)", 21, 15000); //在堆內(nèi)存新建一個(gè)Person
console.log(p.name); //小強(qiáng)
f(p);
console.log(p.name); //小明
  1. 綜合題泵喘。原型鏈方面還不太懂,需要加深學(xué)習(xí)碌嘀。

    function Foo(){
        getName = function(){ alert(1) };
        return this;
    }
    Foo.getName = function(){ alert(2); };
    Foo.prototype.getName = function(){ alert(3); };
    var getName = function(){ alert(4); };
    function getName() { alert(5); };
    //根據(jù)上述代碼,求下列代碼按順序輸出結(jié)果
    Foo.getName();
    getName();
    Foo().getName();
    getName();
    new Foo.getName();
    new Foo().getName();
    new new Foo().getName();
    
    //變量和函數(shù)存在變量提升和函數(shù)提升歪架,將原來的7股冗、8行移到前面
    function Foo(){
        getName = function(){ alert(1); };//執(zhí)行這行時(shí),尋找到11行和蚪,并將11行覆蓋為alert(1);
        return this;  //指向全局window
    }
    var getName;  //提升后和變量存在名稱沖突止状,優(yōu)先保留函數(shù),故該行失效
    function getName() { alert(5); }; //該行實(shí)際上被覆蓋為 alert(4) 了
    /**********上述是提升后的代碼*************/
    Foo.getName = function(){ alert(2); };
    Foo.prototype.getName = function(){ alert(3); };
    getName = function(){ alert(4); };  //執(zhí)行到這行時(shí)攒霹,原本的第7行代碼被覆蓋為 alert(4)
    

    開始執(zhí)行:

    Foo.getName(); //找到第9行怯疤,執(zhí)行 alert(2);
    getName();     //執(zhí)行第11行,執(zhí)行 alert(4);
    Foo().getName();//注意運(yùn)算符優(yōu)先順序催束,執(zhí)行第3行集峦,由于函數(shù)內(nèi)部未使用var定義gerName,會去全局尋找getName抠刺,并將全局getName覆蓋為alert(1);
    getName();  //此時(shí)getName已經(jīng)被上一行代碼改變塔淤,故執(zhí)行alert(1);
    new Foo.getName(); // new (Foo.getName)()  ->  new ( function(){alert(2);} )(),此時(shí)執(zhí)行 alert(2);
    //實(shí)例對象找屬性沿著原型鏈查找
    new Foo().getName();// ( new Foo() ).getName()  ->  foo.getName() 速妖,實(shí)例對象foo自身沒有g(shù)etName()高蜂,找到第10行,執(zhí)行 alert(3); 本人這里理解是alert(1)
    new new Foo().getName(); //基本同上一條代碼罕容,執(zhí)行 alert(3);
    

    執(zhí)行結(jié)果: 2 4 1 1 2 3 3

  2. 同上

    function Foo(){
        getName = function(){ alert(1) };
        return this;
    }
    Foo.getName = function(){ alert(2); };
    Foo.prototype.getName = function(){ alert(3); };
    var getName = function(){ alert(4); };
    function getName() { alert(5); };
    
    // function Foo(){
    //     getName = function(){ alert(1) };//注意未定義var
    //     return this;
    // }
    // function getName() { alert(5); };
    // 
    // Foo.getName = function(){ alert(2); };
    // Foo.prototype.getName = function(){ alert(3); };
    // getName = function(){ alert(4); };
    
    getName();//4
    Foo().getName();//1
    new Foo.getName();//2
    new Foo().getName();//3
    new new Foo().getName();//3
    

2. 數(shù)組相關(guān)函數(shù)用法問題

  1. 帶橫杠字符串改為駝峰命名

    split(‘-’): 將字符串根據(jù)-進(jìn)行切割

    substr(1)從第二個(gè)字符開始取出后面的字符串

    join()根據(jù)某個(gè)分隔符將數(shù)組連接成字符串

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8">
         <title></title>
     </head>
     <body>
         <div id="app"></div>
         <script type="text/javascript">
             (function toString(){
                 str = prompt("請輸入需要轉(zhuǎn)換為駝峰格式的字符串(**-**-**):");
                 var arr = str.split('-');
                 for (var i = 1; i < arr.length; i++) {
                     arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1);
                 }
                 document.getElementById('app').innerHTML = arr.join('')
             })();
         </script>
     </body>
    </html>
    
    
  2. 冒泡排序

var beforeBubbleSort = [5, 44, 21, 38, 3, 2, 1, 88, 2, 6, 56, 55];
for (var i = 0; i < beforeBubbleSort.length - 2; i++) {
    for (var j = 0; j < beforeBubbleSort.length-1-i; j++) {
        if (beforeBubbleSort[j] > beforeBubbleSort[j+1]) {
            temp = beforeBubbleSort[j];
            beforeBubbleSort[j] = beforeBubbleSort[j+1];
            beforeBubbleSort[j+1] = temp;
        }
    }
}
console.log(beforeBubbleSort)
  1. 反轉(zhuǎn)數(shù)組

    var arr = [1, 3, 5, 9, 7];
    for (var i = 0; i < arr.length/2; i++ ) {
        temp = arr[i];
        arr[i] = arr[arr.length - i - 1];
        arr[arr.length - i - 1] = temp
    }
    console.log(arr)
    
  2. 去掉數(shù)組中重復(fù)的數(shù)據(jù)

    var arr = [1, 2, 3, 3, 4, 5, 6, 6];
    var temp = [];
    temp[0] = arr[0];
    for (var i = 1; i < arr.length; i++) {
        for (var j = 0; j < temp.length; j++) {
            //相同數(shù)值則不插入
            if (arr[i] == temp[j]) {
                break;
            }
            //循環(huán)到最后一個(gè)都沒有相同數(shù)值备恤,再執(zhí)行插入操作
            if (j == temp.length - 1) {
                temp.push(arr[i]);
            }
        }
    }
    console.log(temp);
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锦秒,隨后出現(xiàn)的幾起案子露泊,更是在濱河造成了極大的恐慌,老刑警劉巖旅择,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤淳,死亡現(xiàn)場離奇詭異,居然都是意外死亡砌左,警方通過查閱死者的電腦和手機(jī)脖咐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門铺敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屁擅,你說我怎么就攤上這事偿凭。” “怎么了派歌?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵弯囊,是天一觀的道長。 經(jīng)常有香客問我胶果,道長匾嘱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任早抠,我火速辦了婚禮霎烙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕊连。我一直安慰自己悬垃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布甘苍。 她就那樣靜靜地躺著尝蠕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪载庭。 梳的紋絲不亂的頭發(fā)上看彼,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音囚聚,去河邊找鬼闲昭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛靡挥,可吹牛的內(nèi)容都是我干的序矩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼跋破,長吁一口氣:“原來是場噩夢啊……” “哼簸淀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起毒返,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤租幕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拧簸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲绪,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贾富。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歉眷。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颤枪,靈堂內(nèi)的尸體忽然破棺而出汗捡,到底是詐尸還是另有隱情,我是刑警寧澤畏纲,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布扇住,位于F島的核電站,受9級特大地震影響盗胀,放射性物質(zhì)發(fā)生泄漏艘蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一票灰、第九天 我趴在偏房一處隱蔽的房頂上張望女阀。 院中可真熱鬧,春花似錦米间、人聲如沸强品。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琼了,卻和暖如春逻锐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雕薪。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工昧诱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人所袁。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓盏档,卻偏偏與公主長得像,于是被迫代替她去往敵國和親燥爷。 傳聞我的和親對象是個(gè)殘疾皇子蜈亩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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