=> 等同于的意思
耦合 : 重复的代码太多了,代码的重复度太高了
高内聚:强功能性,高独立性
低耦合:把重复的代码提取出来 -> 模块的单一责任制
解耦合:使用函数可以很好的进行解耦合(减少重复)
最基本的函数写法 - 函数
function test (参数){函数执行语句}
函数名的命名规则
不能数字开头
字母 数字 下划线 $ 组成
小驼峰命名法 myFunction
JavaScript 保留关键字
函数声明
function test(){var a=1,b=2;console.log(a,b);}
表达式 字面量
var test = function demo(){var a = 1;b = 2;console.log(a,b);// demo() 只能在函数内部调用}console.log(test.name);// demo();test();
匿名函数表达式 函数字面量(函数赋值给了一个字面量(变量))
var test = function(){ //匿名函数var a = 1,b = 2;console.log(a,b);}
形参 实参
var aa = Number(window.prompt('a')); ///33var bb = Number(window.prompt('b')); //22function test(a,b){ //形参console.log(a+b);}test(aa,bb); //实参
实参与形参不匹配的情况
实参多于形参的情况function test(a,b){//相当于 var a = 实参1,b=实参2;console.log(a,b); // 1 2}test(1,2,3)实参少于形参的情况function test(a,b,c){//相当于 var a = 实参1,b=实参2;console.log(a,b,c); // 1 2 undefined}test(1,2)
查看实际参数 与形式参数
function test(a,b){console.log(test.length); //查看形参参数console.log(arguments); //查看实参console.log(arguments.length); //查看实参长度console.log(arguments[0]); //查看具体某位实参的值}test(1,2,3)
实参求和
var a = 0;
function sum(){
for(var i=0;i<arguments.length;i++){
a+=arguments[i];
}
console.log(a);
}
sum(1,2,3,4,5,6)
实参在函数中的更改规则
//若函数调用时实参传值了 则可以在函数中更改实参
function test(a,b){
a = 3; // => 等价于 var a; a = 3
console.log(arguments[0]); // =>console.log(a);
}
test(1,2)
//若函数调用时实参没传值 则在函数中更改实参 无效
function test2(a,b){
b = 3; // => 等价于 var undefined; undefined = 3
console.log(arguments[1]); //undefined // =>console.log(undefined);
}
test2(1)
return的作用:1.终止函数执行(return 之后的语句都不再执行) 2.返回函数的值
function test(name){
if(!name){
return '您没有填写姓名!';
}
return name;
}
console.log(test('jiejie'));
console.log(test(''));
三目运算写法
function test(name){
return name===''? '您没有填写姓名': name ;
}
console.log(test('jiejie'));
console.log(test(''));
逻辑或写法
function test(name){
return name || '你没有填写姓名';
}
console.log(test('jiejie'));
console.log(test(''));
全局变量与局部变量
a = 1;
function test1() {
var b = 2;
a = 4;
console.log(a); //4
function test2() {
var c = 3;
b = 5;
console.log(b); //5
}
test2()
}
test1();
注
1.函数若不写 return 函数默认返回undefined;
作业
1.定义一个函数,从wp接收一个饮料的名称,函数返回对应的价格
2.定义一个函数,从wp接收第一个数,接收一个运算符号(+-*/%),接收第二个数,利用这个函数做运算,并返回运算结果
3.定义一个函数,从wp接收一个n,算出n的阶乘,不能使用for循环
4.定义一个函数,从wp接收一个n,算出斐波那契数列的第N位,不能使用for循环
作业1 .定义一个函数,从wp接收一个饮料的名称,函数返回对应的价格
错误写法
var val = window.prompt("饮料名称","");
function name1(test){
switch (test) {
case '可乐':
return '3' //return 是跳出此函数
case '雪碧':
return '2.5'
default:
return '1';
}
console.log('return 会不执行return之后的语句') //因使用return跳出name1函数 所以此行不执行
}
console.log(name1(val));
误区 :为什么switch不用return退出循环2
1.return 是退出当前函数函数 上列中指name1 函数 如果 switch语句后面没有其他语句则 此处写return语句实现效果与break 相同
若switch语句之后有其他执行语句 使用return则会跳出函数不在执行 对应上列中的 console.log(‘return 会不执行return之后的语句’
2. switch是多分支选择语句并不是循坏语句
引
switch中return和break的作用一样吗? https://zhidao.baidu.com/question/294095125.html
正确写法
var val = window.prompt("饮料名称","");
function name1(test){
var price;
switch (test) {
case '可乐':
price = 3;
break;
case '雪碧':
price = 2.5;
break;
default:
price = 1;
}
return price;
}
console.log(name1(val));
作业2 .定义一个函数,从wp接收第一个数,接收一个运算符号(+-*/%),接收第二个数,利用这个函数做运算,并返回运算结果
//1.调用函数时不传参
var num1 = parseInt(window.prompt("第一个数","")),
num2 = parseInt(window.prompt("第二个数","")),
symbol1 = window.prompt("运算符号","");
function ex(){
var numVal;
console.log(symbol1);
console.log(arguments);
switch (symbol1) {
case '+':
numVal = num1 + num2;
break;
case '-':
numVal = num1 - num2;
break;
case '*':
numVal = num1 * num2;
break;
case '/':
numVal = num1 / num2;
break;
case '%':
numVal = num1 % num2;
break;
default:
break;
}
return numVal;
}
console.log(ex());
2.调用函数时改变实参的值
var num1 = parseInt(window.prompt("第一个数","")),
num2 = parseInt(window.prompt("第二个数","")),
symbol1 = window.prompt("运算符号","");
function ex(symbol1){
var numVal;
console.log(symbol1);
console.log(arguments);
switch (symbol1) {
case '+':
numVal = num1 + num2;
break;
case '-':
numVal = num1 - num2;
break;
case '*':
numVal = num1 * num2;
break;
case '/':
numVal = num1 / num2;
break;
case '%':
numVal = num1 % num2;
break;
default:
break;
}
return numVal;
}
console.log(ex('-'));
3.在函数内部改变形参的值
var num1 = parseInt(window.prompt("第一个数","")),
num2 = parseInt(window.prompt("第二个数","")),
symbol1 = window.prompt("运算符号","");
function ex(){
var numVal;
symbol1 = '-';
console.log(symbol1);
console.log(arguments);
switch (symbol1) {
case '+':
numVal = num1 + num2;
break;
case '-':
numVal = num1 - num2;
break;
case '*':
numVal = num1 * num2;
break;
case '/':
numVal = num1 / num2;
break;
case '%':
numVal = num1 % num2;
break;
default:
break;
}
return numVal;
}
console.log(ex());
作业3定义一个函数,从wp接收一个n,算出n的阶乘,不能使用for循环
递归求n的阶乘
var n = parseInt(window.prompt("输入数",""));
function ex(n){
if(n<=1){
return 1;
}
return n*ex(n-1);
}
console.log(ex(n));
作业4.定义一个函数,从wp接收一个n,算出斐波那契数列的第N位,不能使用for循环
var n = parseInt(window.prompt("输入数",""));
function ex(n){
if(n<=2){
return 1;
}
return ex(n-1)+ex(n-2);
}
console.log(ex(n));
