2021-05-17 函数和作用域

1.arguments的使用

    当我们不确定有多少哥参数传递的时候,可以用arguments 来获取。在javascript中,arguments实际上它是当前甘薯的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中储存了传递的所有实参。

    arguments展示形式是一组伪数组,因此可以进行遍历。

        具有length属性

        按索引方式存储数据

        不具有数组的push,pop等方法

2.函数的两种声明方式

    1.利用函数关键字自定义函数(命名函数)

    2.函数表达式(匿名函数)      var 变量名 = function(){}

3.作用域

    3.1 javascript作用域 : 就是代码名字(变量)在某个范围内起作用和效果 目的是为了 提高程序的可靠性更重要的是减少命名冲突

    3.2  js的作用域(es6)之前 : 全局作用域  、局部作用域

    3.3  全局作用域 :整个script标签 或者是一个单独的js 文件、在全局作用域下声明的变量叫做全局变量

    3.4  局部作用域(函数作用域)在函数内部就是局部作用域这个变量只在函数内部起效果和作用、 在局部作用域下声明的变量叫做局部变量

注意: 函数的形参也可以看做是局部变量 、在函数内不适用var声明的变量也是全局作用域。

    3.5 执行效率     

        全局变量只有浏览器关闭的时候才会销毁,比较占内存资源

        局部变量 当我们程序执行完毕就会销毁,比较节约内存资源

4.作用域 链

    只要是代码,就至少有一个作用域

    写在函数内部的局部作用域

    如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域

    根据在内部函数可以访问外部函数变量的这种机制,用链式查找 决定那些数据能被内部函数访问,就称作作用域链

5.预解析

    5.1   我们js引擎运行js分为两步 : 预解析 代码执行

        (1)。 预解析 js引擎会把js 里面所有的var 还有function提升到当前作用域的最前

        (2)。代码执行 按照代码书写的顺序从上往下执行

    5.2 预解析分为 变量预解析(变量提升)和函数预解析(函数提升)

        (1)。变量提升 就是把所有的变量声明提升到当前的作用域最前面  不提升赋值操作。

        (2)函数提升 就是把所有的函数声明提升到当前作用域的最前面  不调用函数


6对象

    6.1什么是对象?

        对象是有属性赫尔方法组成的。

            属性:事物的特征,在对象中用属性来表示

            方法 : 事物的行为, 在对象中用方法来表示    

    6.2 为什么需要对象

        保存一个值时,可以使用变量,保存多个值时可以使用数组。如果要保存一个完整的信息,这时 就需要对象了。

    6.3 创建对象的三种方式

        (1)。利用对象字面量创建对象( ) var obj = {}

                1.里面的属性或者方法我们采取键值对的形式

                2.多个属性或者方法中间用逗号隔开的

                3. 方法冒号后面跟的是一个匿名函数

        (2)。 使用对象

                1.调用对象的属性     采取  对象名。属性名

                2. 另一种方法    对象名【‘属性名’】

                3. 调用对象的方法   obj.函数名 

        (3) 变量、属性、函数、方法的区别

            变量和属性的相同的 他们都是用来存储数据的

            变量  单独声明并赋值  使用的时候直接写变量名 单独存在

            属性  在对象里面的不需要声明的  使用的时候必须是 对象。属性

        (4)函数和方法的相同点、都是实现某种功能 做某件数

                函数是单独声明 并且调用的  函数名()单独存在的

                方法 在对象里面 对象名。方法名();

        (5) 利用 new object  创建对象

                1. 我们是利用 等号 =  赋值的方法  添加对象的属性和方法

                2. 每个属性和方法之间用 分号结束

        (6)利用构造函数创建对象

                构造函数 : 是一种特殊的函数,主要用来初始化对象 , 即为对象成员变量赋初始值,它总与new 运算符一起使用。

                1. 构造函数名字首字母要大写

                2.我们构造函数不需要return 就可以返回结果

                3.我们调用构造函数 ,必须使用 new

                4.我们只要new 构造函数  调用函数就创建一个对象 {}

                5. 我们的属性和方法前面必须添加 this

        (7)构造函数和对象

                构造函数,抽取了对象的公共部分,封装到了函数里面,它泛指某一大类(class)

                创建对象 , 特指某一个,通过new 关键字创建对象的过程我们也称为对象实例化    

    7. new关键字

            new关键字执行过程

                1.在内存中创建一个新的空对象。

                2.让this指向这个新的对象

                3. 执行构造函数里面的代码,给这个新对象添加属性和方法

                4.返回这个新对象(所以构造函数里面不需要return)。

    8.遍历对象属性    

            for...in 用于对数组或者对象的属性镜像循环操作。for(var 变量  in   对象) 变量输出的是属性名      对象【变量】得到的是属性值 

        简易计算机

var sum = prompt(

        '1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n 请输入你的选项'

      );

      var num1 = parseFloat(prompt('请输入第一个值'));

      var num2 = parseFloat(prompt('请输入第二个值'));

      var bb = [num1, num2];

      function getSum(aa, bb) {

        while (sum != 5) {

          switch (aa) {

            case '1':

              alert('值为' + (bb[0] + bb[1]));

              sum = prompt(

                '1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n5.退出\n 请输入你的选项'

              );

              break;

            case '2':

              alert('值为' + (bb[0] - bb[1]));

              sum = prompt(

                '1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n5.退出\n 请输入你的选项'

              );

              break;

            case '3':

              alert('值为' + bb[0] * bb[1]);

              sum = prompt(

                '1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n5.退出\n 请输入你的选项'

              );

              break;

            case '4':

              alert('值为' + bb[0] / bb[1]);

              sum = prompt(

                '1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n5.退出\n 请输入你的选项'

              );

              break;

            case '5':

              break;

            default:

              alert('请输入正确指令');

              sum = prompt(

                '1.加法运算\n2.减法运算\n3.乘法运算\n4.除法运算\n5.退出\n 请输入你的选项'

              );

              break;

          }

        }

        alert('已退出');

      }

      getSum(sum, bb);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容