zoukankan      html  css  js  c++  java
  • js函数

    1.js函数的定义、调用、执行

    function fn(){
      console.log(123);    
    }

    fn();

     注意:以这种方式定义的函数,在调用的时候既可以在函数之前调用,也可以在函数之后调用

    var fn = function(){
      console.log(123);
    };
    
    fn();
    

      注意:以这种方式定义的函数,在调用的时候只能在函数之后调用

    2.JavaScript代码运行分两个阶段:预解析→执行

      预解析:在预解析时,会提前将script标签里所有的函数定义和变量声明提前变量的赋值不会提前,这样就可以先调用再执行方法一里定义的函数(先调用后定义)。而方法二里的变量也会提前,但是赋值不会提前。(不能先调用后定义)       方法二里定义的函数又叫函数表达式,后面需要加“;”。

       执行:按照代码顺序从上到下执行(例外:setTimeout,setInterval,ajax里的回调函数,事件中的函数需要触发执行)

    3.js函数的常用方法

    var cd = function(){
        console.log('test');
    };
    
    function fn(callback){
        callback();
    }
    
    fn(cd);
    
    // 将一个函数作为另一个函数的参数
    

      

    function fn1(){
    	var n =1;
    
    	var fn = function(){
    		n ++;
    		console.log(n);
    	};
    
    	return fn;
    }
    var fn2 = fn1();
    
    fn2();
    fn2();
    fn2();

    // 结果:123
    // 闭包的使用,本应为222,闭包则使得fn里的空间成为私有空间,可以使用fn1里的变量

      总结:函数不仅可以作为参数,也可以作为返回值;函数的嵌套形成闭包。

    4.关于作用域

    var data = [];
    for (var i = 0; i < 3; i++) {
    	data[i] = function(){
    		console.log(i);
    	}
    }
    data[0]();
    data[1]();
    data[2]();

    // 执行结果:3 3 3

      注:JavaScript没有块级作用域,JavaScript有两种作用域:全局作用域、函数作用域。(异常处理作用域:try catch、eval作用域)答两种就好,括号里的作用域作为扩展。

    var data = [];
    for (var i = 0; i < 3; i++) {
    	data[i] = (function(k){
    		return function(){
    			console.log(k);
    		}
    	})(i);
    }
    
    data[0]();
    data[1]();
    data[2]();
    // 执行结果:0 1 2
    

      注:闭包的作用就是通过最少两层的函数嵌套形成私有作用域,缓存中间值

     5.面向对象的写法

    function JuiceMachine(fruit){//  构造函数
    	this.fruit = fruit;
    	this.produceJuice = function(){
    		console.log(this.fruit + '果汁');
    	}
    }
    
    JuiceMachine.produceJuice();
    //  报错:JuiceMachine.produceJuice is not a function
    //  this方式加的这些属性都属于通过构造函数生成的对象的,不能通过函数名直接调用;以“.”生成的属性和方法可以直接通过函数名调用
    
    JuiceMachine.brand = '九阳';//  brand商标
    JuiceMachine.open = function(){
    	console.log('open');
    }
    // JuiceMachine.open(); // 函数本身就是一个对象,可以加新的对象、新的行为 var apple = new JuiceMachine("苹果"); apple.produceJuice(); var brand = apple.brand;// 这里的brand没有值,商标和打开的行为是属于果汁机的 var orange = new JuiceMachine("橘子"); orange.produceJuice();

     注:function有双重身份→1,对象;2,构造函数;在JavaScript里没有明确的类的区分 

  • 相关阅读:
    mysql在第一次查询的时候很慢,第二次查询就比较快的原因?
    mysql的递归(使用函数)
    什么样的男人才是女人眼中最帅的男人
    面试题总结
    java的重载总结
    arduino读取GPIO数据
    electron+react项目改为typescript
    百度AI训练营笔记
    python读取文件出现ufeff问题
    大端小端
  • 原文地址:https://www.cnblogs.com/happyzwt/p/6492941.html
Copyright © 2011-2022 走看看