Java教程

03-javascript函数

本文主要是介绍03-javascript函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、函數的创建

函数定义的过程

  • 1、准备一个盒子
  • 2、给这个盒子一个名字
  • 3、把要执行的代码放进盒子里面去(代码不会执行)
1、声明函数
function fn( ){
	console.log(123)
}

2、函数表达式
var fun = function( ){
	console.log(123)
}
3、ES6箭头函数
var fn = x => x * x;

2、函数调用

声明式函数可以再声明之前调用 函数表达式不能在声明式之前调用,但都可以在声明之后调用

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

var fun = function(){
	console.log(456)
}

只要写了 函数名( ) 都是函数立即调用

function fn(){
	console.log(123)
}
function fun(){
	console.log(123)
}
console.log(fn == fun)   //false
console.log(fn === fun)  //false
//fn 是函数的名字(实际保存的就是这个空间的地址)

3、参数

  • 形参: 是函数定义的时候书写的,只能在函数内部使用
  • 实参: 是函数调用阶段给形参赋值的
    • 当形参的个数比实参多的时候,多出来的就是undefined
    • 当实参的个数比形参多的时候,想要去拿到多出的实参值,可以用arguments

4、arguments 函数内部的数据,这个数据不用做任何的操作就可以直接使用 很像数组

function fn(num1,num2){
   console.log(arguments)
   console.log(arguments.length)
   //arguments就是实参的集合
}
fn(1,2,3)   

eg:求任意几个数的和,因为不确定有几个参数,所以不用形参

function fn( ){
	var sum = 0
	for(var i = 0; i < arguments.length; i++){
		sum +=arguments[i]
	}
	consloe.log(sum)
}
fn()

5、函数的返回值 return

我调用这个函数 只希望你把这个结果给我,至于我拿到这个结果要干什么你不管

function fn(){
    console.log("我是 fn 函数")
}
var res = fn()  //undefined   代表这个函数执行完毕的结果就是undefined
function fn(){
   return "我是 fn 函数"
}
var res = fn()
console.log("这是我拿到的结果" + res) 

函数有且只有一个返回值,后面的代码不会执行

  • 函数没有写 return 返回值就是undefined
  • 函数谢了 return 但是 return 后面没有跟东西,返回值也是undefined

函数什么时候写 return 什么时候不写 return ?

​ 1、调用函数以后,希望拿到一个结果,需要写 return

​ 2、调用这个函数,只希望它去执行一段代码,你不需要代码执行完给你返回结果的时候就不用鞋 return

6、预解析

在执行代码之前,浏览器会把所有的代码先通读解释一遍 变量提升 1、var 2、声明式函数
例1:

var a = 10
console.log(a)
function a( ){
    console.log("我是 a 函数")
}
a()
预解析: 1、在全局声明一个变量 a 可用
		2、在全局声明一个变量 a 可用  并且是一个函数的地址
代码执行:1、 a = 10
		2、console.log(a)
		3、a()

例2:

var a = 100
function a(){
    var b = 10
    console.log("我是 a 函数")
}
a()
var a = function(){
    console.log("我是函数表达式 a")
}
a = 200
a()
预解析: 1、全局声明一个变量 a 可用
		2、全局声明一个变量 a 可用 并且是一个函数的地址
        3、全局声明一个变量 a 可用
        经过上面的预解析以后,全局有且只有一个 a 并且是一个函数的地址
代码执行: 1、a = 100
		 2、a()  100()  =>  a is not a function   报错停止执行代码

预解析的无节操性

  • if条件语句里面的代码,虽然没有执行但是会进行预解析
if(false){
    var a = 100
}
console.log(a)    //undefined
预解析: 1、全局声明一个变量 a 可用
代码执行: 1、console.log(a)  //undefined
  • return 后面的代码不会执行 但是会进行预解析
function a() {
    console.log(b)
    return
    var b = 10
}
a()  //undefined

7、函数执行阶段

  • 1、通过函数名字的名字(地址)找到这个函数
  • 2、形参赋值
  • 3、函数内部预测
  • 4、函数内部的代码执行

8、作用域

变量起作用的范围

  • 全局作用域 ->整个页面 生命周期:页面打开 -> 页面关闭
  • 局部作用域 => js目前只有函数有局部作用域

作用域的访问规则:

  • 1、如果自己的作用域里面有,那就直接拿来用
  • 2、如果自己的作用域没有,就往上找,找到父级作用域,如果有就直接拿来用
  • 3、如果父级作用域也没有,那就继续往上找,直到找到某一个父级作用域有就直接拿来用,如果父级作用域都没有这个变量 就找到全局作用域 如果有就直接拿来用 如果全局作用域都没有这个变量 报错 *** is not defined

作用域赋值规则:

  • 1、如果自己作用域有这个变量 那就直接赋值
  • 2、如果自己作用域没有这个变量 那就往上一级作用域去查找 如果有 直接赋值
  • 3、如果上一级作用域也没有 继续往上找 直到找到有这个变量的上一级作用域 就直接赋值 如果父级作用域都没有这个变量 就找全局作用域 如果有 就直接赋值 ** 如果全局作用域都没有这个变量 就先声明(隐式)一个再赋值 **
这篇关于03-javascript函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!