zoukankan      html  css  js  c++  java
  • JS自学笔记03

    JS自学笔记03

    1、函数练习:
    如果函数所需参数为数组,在声明和定义时按照普通变量名书写参数列表,在编写函数体内容时体现其为一个数组即可,再传参时可以直接将具体的数组传进去

    var max=getArratMax([1,4,2,6,8,2,5]);

    关于说明:

    /**
    *函数的说明
    *@param array参数为一数组//解释说明参数列表
    *returns //解释说明返回值
    *
    *
    /
    
    当有人需要查看该函数的说明时,使用ctrl+左键点击函数名即可访问以上注释
    
    

    这里写图片描述

    //输入年月日,获取这个日期是这一年的多少天
    function getDates(years,month,day){
    var days=day;
    if(month==1){
    return days;
    }
    var months=[31,28,31,30,31,30,31,31,30,31,30,31];
    }
    for(var i=0;i<month-1;i++){
    days+=months[i];
    }
    //判断是否为闰年
    if(year%4==0&&year%100==0&&year%400==0&&month>2)
    {
    days++;
    }
    return days;

    2、arguments对象
    定义一个函数,若不确定用户是否传入了多少参数,此时若知道了参数的个数,就可继续进行运算
    arguments.length可获取当前参数列表的参数个数
    只使用arguments对象可以查看当前所传参数
    3、函数的其他定义方式
    1)命名函数:函数具有函数名,函数名存储的是函数代码
    匿名函数:函数不具有函数名,不能直接调用
    2)函数表达式的定义方式:

    var 变量名=function(...){...};
    f(...);//调用函数
    function f(){
    console.log("你好");
    }
    console.log(f);//将输出f函数的代码
    var f1=function(){
    console.log("你好");
    }
    f1();//你好
    f1=function(){
    console.log("您好");
    };
    f1();//您好
    //根据函数名存储的是函数代码的原理
    (function(){console.log("你好")})();
    函数的自调用,没有名字,声明的同时直接调用
    一次性的

    函数同时也是一数据类型,function型,可作为参数使用
    注意,作参数时不需要带括号,被称为回调函数

    function f1(fn){
    fn();
    }
    function f2(){
    console.log(你好);
    }
    f1(f2);

    函数也可作为返回值被使用

    function f(){
    console.log("你好");
    return function(){console.log("输出")}
    }
    var ff=f();//调用
    ff();

    4、作用域
    1)全局变量:
    该变量是由var声明的,为全局变量,可以在页面的任何位置使用。如果页面不关闭,该变量将一直占有内存空间不被释放
    局部变量:在函数内部的变量是局部变量,外边不可使用。除了函数以外,其他的任何位置定义的变量都是全局变量
    块级作用域:{}一对大括号可视为一块,在这对括号内定义的变量只能在该块内使用。js中不存在块级作用域,在块内声明的变量也可以在块外使用,函数除外。
    全局作用域:全局变量的使用范围
    局部作用域:局部变量的使用范围
    隐式全局变量:不使用var声明变量,被称为隐式全局变量,可以被delete关键字删除并释放,全局变量则不能;并且隐式全局变量使用在函数内,外界仍可直接访问该变量。
    2)作用域链
    这里写图片描述

    5、预解析
    1)提前解析代码
    把变量及函数的声明提前。把变量声明提前到当前所在作用域最上面。把函数声明提前到当前所在作用域最上面。先提升var,再提升function

    console.log(num);
    var num=10;//系统预解析该条指令中的声明部分,上述输出语句将输出undefined
    
    
    f();//输出undefined,就算没有下面10的赋值语句也是undefined,因为都只会把声明提前,然后执行函数
    var num=20;
    function f(){
    console.log(num);
    var num=10;
    }

    案例:

    function f1(){
    console.log(num);
    var num=10;
    }
    f1();//输出undefined
    console.log(num);//访问不到,报错
    预解析中,变量的提升,只会在当前的作用域中提升,提升到当前作用域的最上面。函数中的变量只会提升到函数的作用域中的最前面,不会出去
    
    预解析会分段。不同对script标签中的重名函数预解析不会发生冲突
    var a=25;
    function abc(){
    alert(a);
    var a=10;
    }
    abc();//undefined
    console.log(a);// 25
    
    console.log(a);//输出函数体内容
    function a(){
    console.log('aaaa');
    }
    var a=1;
    console.log(a);//1
    var a=b=c=9;
    //其中a为全局变量,在函数体内定义时只在体内有效。b,c是隐式全局变量,全场有效
    f1();//报错
    var f1=function(){
    console.log(a);
    var a=10;
    }
  • 相关阅读:
    uniapp IOS使用uni.getLocation获取不到具体城市名字
    uniapp 打开[ios/安卓]GPS定位权限
    for循环中利用计时器使用let和var
    uniapp 调起底部输入框textarea聊天页面被键盘顶起
    父子组件传布尔类型,发现有问题一直传字符串
    Kafka学习-基础知识
    剑指offer-删除链表中重复的节点
    LEACH协议原文详解
    主流机器学习框架
    算法工程师-职位描述
  • 原文地址:https://www.cnblogs.com/Tanqurey/p/10485298.html
Copyright © 2011-2022 走看看