https://blog.csdn.net/mirror_Mx/article/details/85112689

  1. if(1 > 0){
  2. document.write('a');
  3. document.write('b');
  4. document.write('b');
  5. }
  6. if(2 > 0){
  7. document.write('a');
  8. document.write('b');
  9. document.write('b');
  10. }
  11. if(3 > 0){
  12. document.write('a');
  13. document.write('b');
  14. document.write('b');
  15. }

1、高内聚低耦合

  1. //这一步封装组件,给后面的其他函数使用
  2. funtion test() {
  3. document.write('a');
  4. document.write('b');
  5. document.write('b');
  6. }
  7. //引入 test() 方法,不用重复造轮子,直接调用就可以,减少代码冗余
  8. if(1 > 0){
  9. test()
  10. }
  11. if(2 > 0){
  12. test()
  13. }
  14. if(3 > 0){
  15. test()
  16. }

2、定义不同的变量的值,可以进行计算输出

  1. function test() {
  2. var a = 123;
  3. var b = 234;
  4. var c = a+b;
  5. document.write(c);
  6. }
  7. test();
  8. 输出结果:357

3、抽象功能出来,进行解耦合

  1. funtion test() {
  2. document.write('hello world');
  3. }
  4. test();

4、函数的定义、也是函数声明

  1. //test 是一个变量名
  2. //funtion 是关键字,方法功能函数
  3. //函数和变量没有多大的区别,函数就是另一种类型的变量,他和数组和对象,都是引用
  4. //栈内存里面存地址
  5. //这是函数的一种定义形式
  6. funtion test() {
  7. }
  8. //变量名/函数名:驼峰写法
  9. //复合单词,必须第一个单词小写后面的每个单词开头大写
  10. //函数声明
  11. funtion theFirstName() {
  12. }
  13. document.write(theFirstName);

5、函数表达式

一般说函数表达式就是匿名函数表达式

  1. //命名函数表达式
  2. //这个函数名是test
  3. var test = funtion test() {
  4. document.write('a');
  5. }
  6. test();
  7. //匿名函数表达式;可以不写funtion 后面的函数名
  8. //这个函数名是demo
  9. var demo = funtion() {
  10. document.write('b');
  11. }
  12. test();
  13. //这个函数名是 abc
  14. var test = funtion abc() {
  15. document.write('a');
  16. }
  17. test();
  18. //表达式忽略它的名字
  19. funtion test() {
  20. document.write('a');
  21. }

6、函数组合

  1. //有关键字,函数名,(), {},还有参数
  2. funtion test() {
  3. document.write('a');
  4. }
  5. test();

7、参数

  1. funtion test(a,b) {
  2. //括号里面的a,b 就相对于 定义了a,b(声明了2个变量); 没有值
  3. //var a;
  4. //var b;
  5. //声明了2个变量有何作用?通过传参形式赋值
  6. }
  7. test(1, 2);
  8. //test括号里面的值。1就会到a里面去,2就会到b里面去;
  9. //括号里面 a,b 为形参
  10. //括号里面 1,2 为实参
  11. funtion test(a,b) {
  12. document.write(a+b);
  13. }
  14. test(1, 2);
  15. //输出结果:3
  16. funtion sum(a,b) {
  17. var c = a + b;
  18. document.write(c);
  19. }
  20. sum(3, 4);
  21. //输出结果:7

8、不限制实参传入,如果形参多,则提示undefined

函数里面会通过 arguments 存储实参

  1. //求 实参 长度
  2. funtion sum(a) {
  3. //arguments---[11,2,3]
  4. for(var i 0; i < arguments.length; i++) {
  5. console.log(arguments[i])
  6. }
  7. }
  8. //实际参数 -- 实参
  9. sum(11,2,3)
  10. //console.log 打印出结果:三个实参
  11. 11
  12. 2
  13. 3
  14. //求 形参 长度
  15. funtion sum(a) {
  16. console.log(sum.length);
  17. }
  18. sum(11,2,3)
  19. //console.log 打印出结果:
  20. 1

image.png

image.png

实参对应形参,才会映射
没有实参,有形参,是不会映射,就算你直接赋值也打印不出来值,输出的是undefined

image.png
输出的是: undefined

9、返回值 return,函数的结束条件+返回值;

  1. //函数执行了 a ,就终止了。不会继续往下执行
  2. //这里叫return 终止函数
  3. funtion sum(a,b) {
  4. console.log('a');
  5. return
  6. console.log('b');
  7. }
  8. sum(1)
  1. //这里叫返回值函数
  2. funtion sum() {
  3. return 123;
  4. conlole.log('a')
  5. }
  6. var num = sum(); //这一步是定义一个num来存储返回值;直接写sum();不返回值。

image.png

结果: number 123

10、写一个函数,功能是告知你所选定的小动物的叫声。

  1. function scream(animal) {
  2. switch(animal) {
  3. case "dog" :
  4. document.write('wang?');
  5. return;
  6. case "cat":
  7. document.write('miao');
  8. return;
  9. case "fish":
  10. document.write('oooooo');
  11. return;
  12. }
  13. }

11、写一个函数,实现加法计数器。

12、定义一组函数,输入数字,逆转并输出汉字形式。

  1. function reverse() {
  2. var num = window.prompt('input');
  3. var str = "";
  4. for(var i = num.length - 1; i >= 0; i--) {
  5. str += transfer(num[i]);
  6. }
  7. document.write(str);
  8. }
  9. function transfer() {
  10. switch(target) {
  11. case "1" :
  12. return "壹";
  13. case "2" :
  14. return "俩";
  15. case "3" :
  16. return "三";
  17. }
  18. }

13、写一个函数,实现n的阶乘。

  1. function jc(n) {
  2. if(n == 1) {
  3. return 1;
  4. }
  5. return n *jc(n - 1);
  6. }

13.1、递归

  1. function mul(n) {
  2. if(n == 1) {
  3. return 1;
  4. }
  5. return n * mul(n-1);
  6. }
  7. mul(5)

//1.找规律
//2.找出口

使用递归程序特别慢,复杂程序不要使用递归。

14、写一个函数,实现斐波那契数列。

  1. function fb(n) {
  2. if(n == 1 || n == 2) {
  3. return 1;
  4. }
  5. return fb(n-1) + fb(n-2);
  6. }
  7. fb(n) == fb(n-1) + fb(n-2);
  8. fb(5) == fb(4) + fb(3);
  9. fb(4) == fb(3) + fb(2);
  10. fb(3) == fb(2) + fb(1);

15、作用域

  1. //函数里面的变量可以外部全局变量
  2. //函数外面的变量不可以访问内部变量
  3. //两个相邻之间独立的函数作用域是不能相互访问的
  4. var a = 123;
  5. //var 外面的变量是全局变量
  6. function test() {
  7. var b = 243;
  8. function demo() {
  9. var c =555;
  10. document.write(b); //可以访问b
  11. document.write(a); //可以访问a
  12. }
  13. demo();
  14. document.write(c);//不能访问
  15. }
  16. test();
  17. document.write(b); //不可以访问
  18. //相邻之间不能访问
  19. var global = 100;
  20. function test() {
  21. var a = 123;
  22. }
  23. function demo() {
  24. var b = 234;
  25. }

16、要求输入一串低于 10 位的数字,输出这串数字的中文大写

input:100 output:一佰
input:1001010 output:壹佰万壹仟零壹拾

  1. 1 var strNumber = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖','拾'];
  2. 2 var numberOfWeight = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿'];
  3. 3
  4. 4 var num = "10001";
  5. 5 chineseNumber(num);
  6. 6
  7. 7 function chineseNumber( num ) {
  8. 8 var onum = num;
  9. 9 if ( onum == 0 ) {
  10. 10 print(strNumber[num[0]]);
  11. 11 return;
  12. 12 }
  13. 13 while ( num != '' ) {
  14. 14 if ( num > 0 ) {
  15. 15 if ( num[0] == 0 ) {
  16. 16 if ( num.length <= 4 )
  17. 17 print(strNumber[num[0]]);
  18. 18 } else {
  19. 19 print(strNumber[num[0]]);
  20. 20 }
  21. 21
  22. 22 if ( num[0] > 0 || num.length > 4)
  23. 23 print(numberOfWeight[num.length-1]);
  24. 24 }
  25. 25 num = num.substring(1);
  26. 26 while ( num[0] == 0 && num[1] == 0) {
  27. 27 num = num.substring(1);
  28. 28 }
  29. 29 }
  30. 30 }
  31. 31
  32. 32 function print( s ) {
  33. 33 document.write(s);
  34. 34 }

17、递归,预编译

作用域精解。