javascript 数据结构和算法读书笔记 > 第一章 javascript的编程环境和模型

时间:2022-06-16 19:46:44

1.变量的声明和初始化

  必须使用关键字 var,后跟变量名,后面还可以跟一个赋值表达式。

  var name;

  var age = 5;

  var str = 'hello';

  var flg = false;

2. javascript 中的算术运算和数学库函数

  +(加)

  - (减)

  *(乘)

  / (除)

  %(取余)

  可以使用的数学库:

  javascript 数据结构和算法读书笔记 >  第一章 javascript的编程环境和模型

 3. 判断结构

  1) if else

  2) switch

  没有特别之处

4.循环结构

  1)while

  2) for

5. 函数

  1)有返回值的

  2)无返回值的

6. 变量作用域

  变量作用域是指,一个变量在程序的哪些位置可以访问。

  javascript中的变量作用域被定义为函数作用域,是指变量的值在定义该变量的函数内是可见的,并且在该函数内的嵌套函数中也可访问该变量。

  言外之意就是指javascript中没有块级作用域(通过大括号{}来分割作用域的方式是无效的)。

function showScope(){
    //   这里返回的是父级作用域里面的scope的值
    return scope;
}

var scope = "global";
console.info(scope);//   global
console.info(showScope());//   global

上面的showScope中并没有定义scope这个变量,但是调用时依然反悔了global,就是业务在其父级作用域中定义过这个变量,这里将其返回。

function showScope(){
   var scope = 'local'; // 在函数自己的作用域内定义scope变量
   return scope;
}

var scope = 'global';
console.info(scope); //    global
console.info(showScope()); //  local

在函数内部自己定义了scope变量,返回时是返回自己作用域中的scope内容,和父级作用域中的同名变量无关。

 function showScope(){
     scope = 'local';  // 这里是修改了父级作用域中的scope值
     return scope;
 }

 var scope = 'global';
 console.info(scope); // global
 console.info(showScope()); // local
 console.info(scope); // global

在函数中没有定义新的scope变量,等于是修改了父级作用域中scope的值,所以在调用了一次showScope方法后,父级作用域中的scope的值也发生了改变。

 7. 递归

先来看个求阶乘的函数

function factorial(number) {
   if (number == 1) {
      return number;
   }else {
      return number * factorial(number- 1);
   }
}
console.info(factorial(5));

数字1的阶乘就是1本身,其他情况下都是这个数字number去乘以number-1的阶乘。

我通过自己的递归调用可以一直求到number=1时的阶乘为止, 如所示:

factorial(5)  —>
5 * factorial(4) —>
5 * 4 * factorial(3) —>
5 * 4 * 3 * factorial(2) —>
5 * 4 * 3 * 2 * factorial(1) —>
5 * 4 * 3 * 2 * 1

8. 对象和面向对象编程

javascript也是一种面向对象的语言,我们可以定义对象,在其中设定私有、共有属性或方法,如下:

function Person(name, age){
   var name = name; // private
   this.age = age;  // public

   this.getName = function(){
         return name;
  };
}

在Person这个函数中,name为私有属性,在函数外是访问不到的;age为共有属性,其对象可以直接访问;getName()为共有方法,可以通过对象直接访问。

var  john = new Person('john', 18);

john.age ->18
john.name -> undefined
john.getName() -> john