W3C三剑客JavaScript——快速入门(二)函数式编程与作用域

6.函数式编程

  • 什么是函数?

    说白了,函数就是一段代码块和数据的集合,讲这些代码块和数据都封装到了一个盒子里,只留一个入口和出口,这样的一种结构就是函数。

  • 什么是函数式编程?

    函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。

  • 函数是一种特殊的对象

  • 创建方法:

    • 构造函数
    • 函数声明
    • 函数表达式
/* 
		函数是一种特殊的对象,它可以存储一段可执行的代码块 
		创建方法
		- 构造函数
		- 函数声明
		- 函数表达式
		 */
		var a,b,c,d;
		// 构造函数,一般不使用
		 var fun1 = new Function("console.log('hello 这是第一个函数~~');");
		
		a = 10;
		
		b = 20;
		
		// 函数声明 利用function关键字 函数名([形参1,形参2...形参N])
		 function fun2(){
		 	console.log('hello 这是第二个函数~~');
		 }
		
		// 函数表达式,创建一个构造函数再用一个变量接收
		
		var fun3 = Function()
		{
			console.log('hello 这是第三个函数~~');
		};
		
		fun1();
		fun2();
		fun3();
		/* 
		return 返回值,没有定义时会返回一个Undefine ,返回值可以是任意类型
		传入参数也可以是任意数据类型
		 */
		function sum(num1 , num2 ){
			
			return num1 + num2;
		}
		
		var sum = sum(5,6);
		
		console.log(sum);
		
		function isPrimeNumber(num){ // 判断是否是一个质数
			if(num < 2 )
			{
				return false;
			}
			for(var i = 2;i<=Math.sqrt(num);i++)
			{
				if (num % i == 0 ) {
					return false;
				}
			}
			return true;
		}
		
		console.log(isPrimeNumber(656));
  • 对象的方法:就是把函数作为对象的属性赋给一个对象,这就是对象的方法

    /* 
    			对象的属性值也可以是一个函数,此时我们叫这个函数为这个对象的方法;
    			 */
    			
    			var obj = new Object();
    			
    			obj.name = "孙悟空";
    			obj.age = 800;
    			obj.sayName = function(){
    				console.log("你好,我是"+obj.name);
    			}
    			obj.sayName();
    			
    			/* 
    			 枚举对象的属性
    			 */
    			
    			for(var n in obj){
    				// console.log("属性名:" + n);
    				console.log(n + ":" + obj[n])
    			}
    
  • 作用域:

    • 作用域指的是变量的作用范围
      • 全局作用域
        • 函数作用域【局部作用域】
        • 在全局作用域中有一个全局对象Window,我们可以直接使用
        • 在全局作用域中所创建的变量都会作为window的属性保存
	/* 
			作用域指的是变量的作用范围
			 - 全局作用域
			 - 函数作用域【局部作用域】
			 - 在全局作用域中有一个全局对象Window,我们可以直接使用
			 - 在全局作用域中所创建的变量都会作为window的属性保存 
			 */	
			
			var a = 123;
			console.log(a);
			console.log(window.a);
  • 函数作用域
  • 调用函数时,函数作用域被创建,函数执行结束时函数作用域被销毁;
    • 每次调用函数就会创建一个新的函数作用域,他们之间是相互独立的
      - 在函数中可以访问全局作用域
      • 当在函数中操作一个变量时,会先在函数中寻找,再依次往上找,直至全局作用域,如果全局作用域中依旧没有则会报错
      • 在函数中要访问全局变量可以用 window.变量名 的形式访问
      • 在函数中用 var 关键字 创建变量会在函数最开始声明
      • 在函数中不使用 var 关键字声明的变量都会变成全局变量
/* 
			- 调用函数时,函数作用域被创建,函数执行结束时函数作用域被销毁;
			- 每次调用函数就会创建一个新的函数作用域,他们之间是相互独立的
			- 在函数中可以访问全局作用域
			- 当在函数中操作一个变量时,会先在函数中寻找,再依次往上找,直至全局作用域,如果全局作用域中依旧没有则会报错
			- 在函数中要访问全局变量可以用 window.变量名 的形式访问
			- 在函数中用 var 关键字 创建变量会在函数最开始声明
			- 在函数中不使用 var 关键字声明的变量都会变成全局变量
			 
			 */
			
			var a = 123
			function fun1(){
				var a = 456;
				console.log("我是fun1");
				fun2();
				function fun2(){
					b = 789;
					console.log("我是fun2");
				}
			}
			fun1();
			console.log(b); //789
			console.log(a); //123
  • 变量声明和加载顺序

  • 变量的声明

    • 使用 var 关键字创建的变量,会在所有代码之前被执行声明

    • 如果声明变量时不使用 var 关键字,则不会被提前执行声明

  • 函数的声明

    • 使用function 关键字声明的函数会在所有代码之前被声明创建函数,即可以在函数声明前调用函数
    • 使用函数表达式创建的函数不会被声明提前,所以不能再声明前被调用
/* 
			变量的声明
			
			- 使用 var 关键字创建的变量,会在所有代码之前被执行声明
			- 如果声明变量时不使用 var 关键字,则不会被提前执行声明
			
			函数的声明
			
			- 使用function 关键字声明的函数会在所有代码之前被声明创建函数,即可以在函数声明前调用函数
			- 使用函数表达式创建的函数不会被声明提前,所以不能再声明前被调用
			
			 
			 */
			
			// console.log(a);  // 报错
			a = 123;
			console.log(a);
			console.log(b);  //undefine
			var b = 123;
			
			fun();
			// fun2(); //报错
			function fun(){
				console.log("我是一个函数");
			}
			
			
			var fun2 = function(){
				console.log("我是一个函数");
			}
  • 立即执行函数
/* 
			函数定义完,立即执行的函数 
			 */
			
			(function(){console.log("hello , 我是匿名立即执行函数");})();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pointer-faker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值