js 函数理解

1函数声明:

(1)function命令:

function foo(){
	//函数体
};
(2)函数表达式:

匿名函数表达式:

var print=function(){
	//函数体
        //将匿名函数赋值给变量,
};
命名式函数表达式:若将一个有函数名的函数赋值给变量,则此函数名只在函数内部有效:

var print=function foo(){
 	alert(typeof foo);
 };
 foo;//foo is not defined(…)
 print();//function
这种写法的用处有两个,一是可以在函数体内部调用自身,二是方便除错(除错工具显示函数调用栈时,将显示函数名,而不再显示这里是一个匿名函数)
函数的表达式需要在语句的结尾加上分号,表示语句结束。而函数的声明在结尾的大括号后面不用加分号。

立即执行函数表达式:

(function(){
//函数体
})();
作为返回值
return function(){
//函数体
}
(3)Function构造函数
var add = new Function(
  'x',
  'y',
  'return (x + y)'
);
Function构造函数接受三个参数,除了最后一个参数是add函数的“函数体”,其他参数都是add函数的参数。
Function构造器内部创建的变量是局部变量。在Function构造器外部无法访问。
Function构造器能使用全局变量,但是,不能使用自由变量

var globalVal="hello";
(function(){
var localVal="world";
Function('console.log(typeof localVal,typeof globalVal);')();
})();
//undefined string
函数表达式和函数声明的区别:
函数声明会被前置,函数表达式则不会。

sum(1,2);//可以在函数声明前调用
function sum(a,b){
	alert(a+b);
}
//result:3
相当于:

function sum(a,b);
sum(1,2);//可以在函数声明前调用
function sum(a,b){
	alert(a+b);
}
函数表达式:

add(1,2);
var add=function sum(a,b){
	alert(a+b);
}
//result:add is not a function(…)

相当于:

var add;
add(1,2);
var add=function sum(a,b){
	alert(a+b);
}
//result:add is not a function(…)

 函数声明函数表达式函数构造器
前置  
允许匿名 
立即调用 
在定义该函数的作用域通过函数名访问  
没有函数名  

2函数的属性和方法:

1name属性:函数的name属性总是返回紧跟在function关键字之后的那个函数名。

                        匿名函数的name属性总是为空字符串。

2length属性:length属性返回函数预期传入的参数个数,即函数定义之中的参数个数。

3toString()方法:返回函数源码。(函数内部的注释也可以返回)


3函数作用域:

在函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。

在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)。

注意,对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量。

函数本身的作用域:

函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在的作用域无关。

4函数参数:

函数参数不是必需的,Javascript允许省略参数。被省略的参数默认值为undefined。

通过下面的方法,可以为函数的参数设置默认值。

function f(a) {
  (a !== undefined && a !== null) ? a = a : a = 1;
  return a;
}

f() // 1
f('') // ""
f(0) // 0
上面代码中,函数f的参数是空字符或0,都不会触发参数的默认值。

5参数传递:

1值传递:函数内部修改参数,不会影响函数外部。

2引用传递(数组,对象,其它函数)

如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。

var obj = [1, 2, 3];

function f(o){
  o = [2, 3, 4];
}
f(obj);

obj // [1, 2, 3]
上面代码中,在函数f内部,参数对象obj被整个替换成另一个值。这时不会影响到原始值。这是因为,形式参数(o)与实际参数obj存在一个赋值关系。

o = obj;



参考:   点击打开链接
               点击打开链接






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值