2018-04-22

javascript基礎(chǔ)

一.函數(shù)的arguments

  • 偽數(shù)組:像數(shù)組,但不是數(shù)組
  • 可以動態(tài)添加參數(shù)
 //求任意個數(shù)的最大值
     function fn(){
         var max = arguments[0];
         for(var i = 1;i< arguments[i];i++){
             if(max < arguments[i]){
                 max = arguments[i]
             }
         }
         return max;
     }
     var max = fn(12,34,56,890);
     console.log(max);

二.函數(shù)的其他案例

   // 翻轉(zhuǎn)數(shù)組 reserve(翻轉(zhuǎn))
     function fn(arr){
     var newArray = [];
     for(var i = arr.length-1; i >= 0; i--){
         newArray[newArray.length] = arr[i];
     }
     return newArray;
     }
     var arr1 = [12,34,56,1];
     var newArray = fn(arr1);
     console.log(newArray);

    // 翻轉(zhuǎn)數(shù)組的方法 reverse()
     var arr1 = [12,34,56,1]
     console.log(arr1.reverse());

     // 數(shù)組的冒泡排序的原理绪爸?
     // 數(shù)組的兩兩比較把大值依次往后挪
     // 外層循環(huán)一次取出比較值中的最大值一次,最后冒泡排序完成
     // 注意做個開關(guān)提高效率  
     function getMp(arr){
         var isSort;
         for(var i = 0;i < arr.length-1;i++){
             isSort = true;
             for(var j = 0; j < arr.length-1-i;j++){
                 if(arr[j] > arr[j+1]){
                     isSort = false; //還沒有排序好,false
                     var temp = arr[j];
                     arr[j] = arr[j+1];
                     arr[j+1] = temp;
                 }
             }
             //定義一個開關(guān),如果true,跳出循環(huán)
             if(isSort){
                 break;
             }
         }
         return arr;
     }
     var arr = [12,23,190,89];
     var le = getMp(arr);
     console.log(le);*/

     // var arr = [12,23,190,89];
     // console.log(arr.sort()); //錯誤

     // 輸入年份是否是閏年
     function getYear(year){
         var flag;
             if(year % 4 ===0 && year % 100 !==0 || year % 400 ===0){
                 console.log(year+'是閏年');
                 flag = true;
             } else{
                 console.log(year+'是平年');
                 flag = false;
             }
             return flag;
         }
         getYear(2016);

    //閏年2
     function fn(year){
         var flag = false;
         if(year % 4 === 0 && year % 100 !== 0 || year % 400 === 0){
             console.log(year+'是閏年');
             flag = true;
         } else {
             console.log(year+'是平年');
         }
         return flag;
     }
     fn(1998);

     //獲取年月日 是當前年的多少天轴脐,中的難點是比如傳入的是5月遍歷1-5月天數(shù)累加
     //一岸霹、三栖忠、五蝌戒、七、八碱工、十娃承、臘是31天,四怕篷、六历筝、九、十一是30天匙头。平年二月28閏年二月29天
     function getDate(year,month,day){
         var days = day;
         for(var i = 1;i<month;i++){
         if(i === 1 || i === 3 || i === 5 || i === 7 || i === 8 || i ==10 || i === 12){
             days += 31;
         } else if(i === 4 || i === 6 || i === 9 ||i === 11){
             days += 30;
         } else {
             if(getYear(year)){ //if里面調(diào)用判斷閏年平年的函數(shù)
                 days += 29; 
             }else{
                 days += 28;
             }
         }
         }
         return days
     }
     var days = getDate(2018,3,2)
     console.log(days);

    //判斷2018.4.21
     function getDate(year,month,day){
         days = day;
         for(var i = 0; i < month; i++){
             if(i === 1 || i === 3 || i === 5 || i === 7 || i === 8 || i === 10 || i === 12){
                 days += 31;
             } else if (i === 4 || i === 6 || i === 9 || i === 11) {
                 days += 30;
             }else if (i === 2){
                 if(getYear(year)){
                     days += 29;
                 } else {
                     days += 28;
                 }
             }
             }
             return days;
         }
         var days = getDate(2018,2,3);
         console.log(days);

三.匿名函數(shù)和自調(diào)用函數(shù)

  • 匿名函數(shù):沒有方法名的函數(shù)

    注意點:

    1. 不可以獨立存在 :只能定義變量等于函數(shù)
     var vvv = function(){  
     }
    
    1. 可以通過自調(diào)用函數(shù):自己調(diào)用自己
  • 自調(diào)用函數(shù): 自己調(diào)用自己;

      (function (){})();
      +function (){}();
      -function (){}();
      *function (){}();
      /function (){}();
    

四.作用域和作用域鏈

  • 作用域

    函數(shù)或者變量可以起作用訪問;
    1.全局作用域:
    在script或者一個獨立的js文件中漫谷,在全局作用域中定義的變量 全局變量。在任何位置都可以訪問.
    2.局部作用域:
    任何一個函數(shù)的內(nèi)部都有一個局部作用域蹂析,在局部作用域中定義的變量 局部變量舔示。局部變量只有在定義該變量的函數(shù)中可以訪問

      // 全局變量
      var a = 10;
      function fn(){
          // 局部變量
          var b = 10;
          //全局變量 ==> window.c = 30,但是不推薦這樣使用
          c = 30;
          console.log(a); // 10
          console.log(c); // 30
          console.log(b); // 10
      }
      fn();
      console.log(c) // 30
      console.log(a); // 10
      console.log(b); // b is not defined
  • 作用域鏈

就近原則

    // 全局變量
     var a = 10; //----->0級作用域鏈
     function fn(){
          // 局部變量
         var a = 20; //----->1級作用域鏈
         console.log(a); // 20
        function fn1(){
            // 局部變量  //----->2級作用域鏈
             console.log(a) // 20
         }
         fn1();
     }
     fn();
     console.log(a); // 10

五.預(yù)解析

  • 函數(shù)提升:但是賦值不提升
  • 變量提升:調(diào)用不提升
  • 函數(shù)和變量同時存在,函數(shù)優(yōu)先
  案例:
  // 1.
  var a = 25;
          function abc (){
              alert(a); //undefined
              var a = 10;
          }
          abc(); 
   //預(yù)解析
      function abc(){
          var a;
          alert(a); //undefined
          a = 10;
      }
      var a;
      a = 25;
      abc(); // 調(diào)用函數(shù)而已

   //----------
   // 2.
   console.log(a); //打印函數(shù)a
          function a() {
            console.log('aaaaa');
          }
          var a = 1;
          console.log(a);

          // 解析
          var a;
          function a() {
            console.log('aaaaa');
          }
          console.log(a); // 函數(shù)整體
          a = 1;
          console.log(a); // 1

          //-------
          var a = 18;
          f1();
          function f1() {
              var b = 9;
              console.log(a);
              console.log(b);
              var a = '123';
          }

          // 解析 
          var a;
          function f1() {
              var b = 9;
              var a;
              console.log(a); //undefined
              console.log(b); // 9
              a = '123';
          }
          a = 18;
          f1();

六.對象概念

  1. 萬物皆對象电抚,對象是一個具體的事物惕稻,一個具體的事物就會有行為和特征。
  2. js中對象的語法格式
      var student = {
      name: '張飛', // key: value,
      age: 18,
      sex: '男',
      sayHi: function () {
          console.log('hello');
      }
      };
      // 對象 具有  屬性和方法
      // 屬性: 特征
      // 方法: 行為

七.創(chuàng)建對象

  1. 對象字面量
 var obj = {
     name:'zs',
     age: 18,
     sayHi:function(){
         console.log(obj.name+'hello');
     } 
 }
 console.log(obj);
  1. 用new Object 獲取對象
     var obj = new Object;
     obj.name = 'keke';
     obj.age = 21;
     obj.sex = '女';
     obj.sayHi = function(){
         console.log(obj.name+'hello');
     }
     console.log(obj)
  1. 當有多個對象就需要封裝函數(shù)-->工廠方法
      function Creatstudent(name,age,sex,hobby){
          var obj = new Object;
          obj.name = name;
          obj.age = age;
          obj.sex = sex;
          obj.hobby = hobby;
          obj.sayHi = function(){
              console.log(this.name+'hello');
          }
          return obj;
      }
      var stu1 = Creatstudent('張三',18,'男',['唱歌','跳舞','旅游']);
      var stu2 = Creatstudent('李四',22,'男',['唱歌','攝影','旅游']);
      console.log(stu1);
      console.log(stu2);
      stu1.sayHi();
      stu2.sayHi();
  1. 構(gòu)造函數(shù) 函數(shù)名的第一個字母要大寫(帕斯卡命名)
  function Student(name,age,sex,hobby){
      this.name = name;
      this.age = age;
      this.sex = sex;
      this.hobby = hobby;
      this.sayHi = function(){
          console.log(this.name+'hello');
      }
  }
  var stu1 = new Student('張三',18,'男',['唱歌','跳舞','旅游']);
  var stu2 = new Student('李四',22,'女',['繪畫','跳舞','旅游']);
  console.log(stu1);
  stu1.sayHi();
  console.log(stu2);
  stu2.sayHi();

八.new

  1. 創(chuàng)建一個空的對象Object;{}
  2. 讓構(gòu)造函數(shù)中的this指向當前對象
  3. 執(zhí)行構(gòu)造函數(shù)
  4. 返回這個對象(return);

九.this

  1. 在函數(shù)中 -----> 指向winndow;
     function fn(){
         console.log(this); //window
     }
     fn();
  1. 在方法中 -----> 指向當前方法創(chuàng)建的對象;
     var stu = {
     name:'keke',
     age:18,
     sex:'男',
     sayHi:function(){
         console.log(this.name+'hello');
         console.log(this); //stu這個方法,包括里面所有的內(nèi)容
     }
     }
     console.log(stu);
     stu.sayHi();
  1. 在構(gòu)造函數(shù)中 -----> 指向構(gòu)造函數(shù)創(chuàng)建的對象;
  function Student(name,age,sex){
      this.name = name;
      this.age = age;
      this.sex = sex;
      this.sayHi = function(){
          console.log(this.name+':hello');
          console.log(this); // Student 這構(gòu)造函數(shù)創(chuàng)建的方法
      }
  }
  var stu1 = new Student('張三',18,'男');
  console.log(stu1);
  stu1.sayHi();

十.遍歷對象和刪除對象

 // 1.遍歷對象
 // 訪問對象的屬性: obj.name / obj['name']
       var obj = {
           name: 'keke',
           age: 18,
           sex: '男',
           sayHi: function(){
               console.log(this.name+':hello');
           }
       }
       console.log(stu);
  // for in
       for(var key in obj){
           console.log(key+'----->'+obj[key]);
       }

  // 動態(tài)添加對象
       var kk = {};
       for(var i = 0;i < 7; i++){
           kk['a'+i] = i;
       }
       console.log(kk);

       for(var key in kk){
           console.log(key+':'+kk[key]);
       }

  // 刪除對象
       var obj = {
           name: 'keke',
           age: 18,
           sex: '女',
           sayHi: function(){
               console.log(this.name+':hello');
           }
       }
       console.log(obj);
       delete obj.name; //刪除對象
       console.log(obj);
       delete obj.sayHi; //刪除方法
       console.log(obj);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝙叛,一起剝皮案震驚了整個濱河市俺祠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖蜘渣,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淌铐,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔫缸,警方通過查閱死者的電腦和手機腿准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拾碌,“玉大人吐葱,你說我怎么就攤上這事⌒O瑁” “怎么了弟跑?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長防症。 經(jīng)常有香客問我孟辑,道長,這世上最難降的妖魔是什么蔫敲? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任扑浸,我火速辦了婚禮,結(jié)果婚禮上燕偶,老公的妹妹穿的比我還像新娘。我一直安慰自己础嫡,他們只是感情好指么,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榴鼎,像睡著了一般伯诬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巫财,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天盗似,我揣著相機與錄音,去河邊找鬼平项。 笑死赫舒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的闽瓢。 我是一名探鬼主播接癌,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扣讼!你這毒婦竟也來了缺猛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荔燎,沒想到半個月后耻姥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡有咨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年琐簇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔吏。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸽嫂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出征讲,到底是詐尸還是另有隱情据某,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布诗箍,位于F島的核電站癣籽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滤祖。R本人自食惡果不足惜筷狼,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匠童。 院中可真熱鬧埂材,春花似錦、人聲如沸汤求。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扬绪。三九已至竖独,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挤牛,已是汗流浹背莹痢。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墓赴,地道東北人竞膳。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像竣蹦,于是被迫代替她去往敵國和親顶猜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,763評論 0 38
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)痘括,也就是一...
    悟名先生閱讀 4,131評論 0 13
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,104評論 0 21
  • 郁悶 自心底蔓延 為什么 不能一次只做一件事 人的心原來一直都在一心二用 對什么事都是三心二意 還有什么意義可言 ...
    墨蘭molan閱讀 152評論 1 2
  • 本周讀經(jīng)內(nèi)容: 《莊子》逍遙游第二 《易經(jīng)》豐卦第五十五长窄,旅卦第五十六滔吠,巽 卦第五十七 《詩詞啟蒙》第160~1...
    陳惠Cherry閱讀 150評論 0 2