1.函数function
声明:function 函数名(参数){}
2.局部变量,外部变量
函数可以访问外部变量,也可以修改外部变量
<script>
let username='John';
function showMessages()
{
username='mark';
alert('hello'+username);
}
alert(username);
showMessages();
</script>
只有在没有局部变量的情况下才会使用外部变量
如果内部函数与外部声明同名的变量,会采用内部变量。
三:函数参数
function 函数名(参数1,参数2,参数3,…)
(区别于c语言,不需要设置参数的类型,调用参数的时候也不同。)
<script>
function showMessage(font,text)
{
alert(font+':'+text);
}
showMessage('Ann','hello');
</script>
做区分
<script>
//注意遇上所说的函数内对全局变量做修改,做对比
function showMessage(font,text)
{
font='*'+font;
alert(font);
}
let font='Ann';
showMessage('Ann','hello');//输出*Ann
alert(font);//不会被修改,还是ANN
//函数修改一个局部的副本
</script>
参数可以设置默认值,也就是调用函数时传入参数小于函数定义内的参数,会被自动定义为undefined,但是可以设置参数的默认值
function(参数=‘not give’)
参数的默认值也可以是其余函数
<script>
function showMessage(font)
{
alert(font||'empty');//认为0为空值
alert(font??'empty');//可以识别0为数字
}
showMessage(0);
</script>
四:返回值
<script>
function showMessage(a,b)
{
return a+b;
}
alert(showMessage(1,2));
</script>
返回return 后什么都不接也是可以的 ,退出函数。
函数内部没有任何操作,直接加一个return,等同于undefined
return后面的式子过多,不能够换行处理,return单独一样会自动加上分号,要采取下面括号包围案例
return (
some + long + expression
- or +
whatever * f(a) + f(b)
)
五:函数表达式
上述之中的创建函数的方式都是函数声明,还有一种创建函数的方式是函数表达式。
通常会写成:let sayHi = function() { alert( “Hello” ); };
末尾含有分号
与函数声明的区别在于,函数表达式是运行到相关代码之时才建立的,但是函数声明是在运行之前就已经建立的。
1.alert( sayHi ); // 显示函数代码
结果是
这行代码并不会运行函数,因为 sayHi 后没有括号。
在 JavaScript 中,函数是一个值,所以我们可以把它当成值对待。上面代码显示了一段字符串值,即函数的源码。的确,在某种意义上说一个函数是一个特殊值,我们可以像 sayHi() 这样调用它。但它依然是一个值,所以我们可以像使用其他类型的值一样使用它。复制如下:
<script>
function showMessage(a,b)
{
alert('say hello!');
}
let fun=showMessage;
fun();
</script>
请注意:showMessage后面没有括号。如果有括号,func = showMessage()会把 showMessage 的调用结果写进func,而不是 showMessage 函数 本身。
六:回调函数
<script>
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}//confirm 弹出含有qustion窗口,鼠标点击“确定”进入yes()对应的函数,如果是“取消”则就对应no()对应函数
function showOk() {
alert( "You agreed." );
}
function showCancel() {
alert( "You canceled the execution." );
}
// 用法:函数 showOk 和 showCancel 被作为参数传入到 ask
//传入的时候不能带括号
ask("Do you agree?", showOk, showCancel);
</script>
七:匿名函数
函数内部定义如下的没有名词的函数,成为匿名函数,函数外部无法访问这些函数
function() { alert(“You agreed.”); },
function() { alert(“You canceled the execution.”); }
八:箭头函数
格式如:let func = (arg1, arg2, …argN) => expression
也就是说,传入参数arg1…这些进行箭头后expression的操作
<script>
let sum=(a,b)=>a+b;//注意是等号
alert(sum(1,2));
</script>
let double = n => n * 2;
// 差不多等同于:let double = function(n) { return n * 2 }
2.
如果没有参数,括号将是空的(但括号应该保留):
let sayHi = () => alert(“Hello!”);
sayHi();
3.
let age = prompt(“What is your age?”, 18);
let welcome = (age < 18) ?
() => alert(‘Hello’) :
() => alert(“Greetings!”);
welcome();
还有多行箭头的操作具体访问:js学习