zoukankan      html  css  js  c++  java
  • JavaScript基础知识(函数)

    函数的基础

    函数: 把实现相同功能的代码放到一个函数体中,当想实现这个功能时,直接执行这个函数即可;减少了的冗余;高内聚,低耦合--> 函数的封装;

    函数:引用数据类型;
    var a = 10;
    function : 关键字:声明定义一个函数;
    function 函数名(){}
    function : 功能;方法;

    函数分为定义和执行;

    function fn1() {
    console.log(100);
    }

    函数执行; 让里面的代码运行;

    fn1();
    console.log(200);
    function sum(num1,num2) {// 形参;
    var total = Number((num1+num2).toFixed(2));
    console.log(total);
    }
    sum(12.8349,13.9417);
    sum(102.349,131.97);
    sum(1,1.09938);

    函数的核心原理

    函数分为两部分: 定义执行
    function fn() {
    var a = {}
    a.b = 10;
    console.log(1);
    }

    函数属于引用数据类型;空间地址类型

    1. 会开辟一个新的空间地址;
    2. 把函数体中的代码当做字符串存储到堆内存中;
    3. 把空间地址赋值给函数名;
    console.log(fn);// 整个函数;
    fn()// fn is not a function;

    堆栈内存:

    当浏览器加载页面时,会形成两个虚拟的内存;一个栈内存,堆内存;

    栈内存: 1) 提供代码的运行环境; 2) : 存储基本数据类型;
    堆内存: 存储引用数据类型;
     

    函数的执行

    fn();
    1.首先会形成一个私有的作用域
    2.形参赋值
    3.变量提升
    4.代码从上到下运行;
    5.作用域的销毁;

    函数的形参和实参

    在函数括号中的参数是形参
    var num = 10;
    function sum(num1,num2) {//函数的入口;
    console.log(num1);// 1
    console.log(num2);// 2
    }
    如果有形参,没有对应的实参,那么形参默认存储的值是undefined;
    形参属于私有变量; 只存在当前的作用域下;
    在函数体中被var 也是私有变量;
    num1=100;
    var a=101;
    函数执行时传的参数是实参;
    sum(1,2,3);
    sum(10,20);
    sum(num);
    console.log(num);
    console.log(num1);
    console.log(a);
    在函数执行时,函数体中可以找到函数外面的变量;但是函数外面不能访问里面的变量;
     
    当函数执行时,首先会形成一个私有的作用域,这个私有作用域保护了里面的私有变量不受外界的干扰;这种机制--> "闭包";
     

    函数的arguments

    arguments 类数组对象
    function sum() {
    // arguments : 函数天生自带实参参数集合
    // 是一个对象数据类型的,不是数组
    // []: 集合;
    console.log(arguments instanceof Array);
    var total = 0;
    for(var i=0;i<7;i++){
    total += arguments[i];
    }
    console.log(total);
    }
    sum(1,2,3,4,58,99,100);

    函数的return

    return 语句会终止函数的执行并返回函数的值。
    function 入口 形参实参;
    函数的出口 return
    return 后面跟着的内容就是函数的返回值;
    function sum() {
    var total =0;
    for(var i =0;i<arguments.length;i++){
    if(typeof arguments[i]==="number"){
    if(!isNaN(arguments[i])){
    total += arguments[i];
    }
    }
    }
    console.log(100)
    return total;
    console.log(200);
    }
    console.log(sum("1", 199, 10, "12px", true, [], 19, NaN));
    // 函数名() : 代表函数返回值; 函数体中return出来的;
    // return: 结束整个函数;下面的代码不再运行;
    函数名() : 代表函数返回值; 函数体中return出来的;
    return: 结束整个函数;下面的代码不再运行;
    如果函数没有return;那么函数默认返回undefined;
    var newSum = sum("1",199,10,"12px",true,[],19,NaN);
    console.log(newSum);

    函数的匿名函数

    匿名函数: 没有名字的函数;
    把等号右边的函数的 空间地址赋值给变量f;
    : 匿名函数
    function fn() {
    }
    函数表达式;
    var f = function () {
    console.log(1)
    }
    f();
    自执行函数 ;自执行函数: 自己运行;
    (function (m,n) {
    console.log(1)
    console.log(m);
    console.log(n);
    })();
    !function () {}();
    +function () {}();
    -function () {}();
    ~function () {}();

    function f() { console.log(100); return 100; } var a = f(); console.log(f());// 100;

    匿名函数就是没有名字的函数; 函数表达式自执行函数

    //=>把一个没有名字的函数(有名字也无所谓)作为值赋值给一个变量或者一个元素的某个事件等:·
    函数表达式·
    oBox.onclick = function(){}
    //=>创建函数和执行函数放在一起了,创建完成立马执行:·自执行函数·
    ;(function(n){})(10);
    //=>以下都是自执行函数,符号只是控制语法规范
    ~function(n){}(10);
    -function(n){}(10);
    +function(n){}(10);
    !function(n){}(10);
  • 相关阅读:
    关于多个EditText的OnTextChange事件陷入死循环的处理
    #define #include #undef的其中一个用法(目的)
    串行移位锁存并行输出可级联器件74HC595
    STM32F10xx CAN BUS相关库文件"stm32f10x_can.c"内的库函数解析
    STM32 之 NVIC(中断向量、优先级) 简述
    STM32F103xx bxCAN(Basic Extended CAN) 滤波机制
    VS上利用C#实现一个简单的串口程序记录
    如何去各型MCU的官网上下载正确的数据手册
    Cotex-M3内核STM32F10XX系列时钟及其配置方法
    Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
  • 原文地址:https://www.cnblogs.com/CCxi/p/9447382.html
Copyright © 2011-2022 走看看