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里没有明确的类的区分 

  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/happyzwt/p/6492941.html
Copyright © 2011-2022 走看看