js学习笔记(三) JavaScript

本系列笔记为JavaScript的学习笔记
JavaScript 作用域和数组

作用域

全局变量定义在所有的block外部,并且能在函数的任意地方access。

const satellite='The Moon',galaxy='The Milky Way'
let stars = 'North Star' //全局变量
const myNightSky = () =>{
  stars = 'Sirius'   //全局变量值会在函数中被改变
  return 'Night Sky: '+satellite+','+stars+','+galaxy;
};
console.log(myNightSky())
console.log(stars)

局部变量作用域只在block内,可以保证在外部不被访问和改变。

const visibleLightWaves=()=>{
  let lightWaves = 'Moonlight'  //内部局部变量
  console.log(lightWaves)
};
visibleLightWaves()
console.log(lightWaves)     //wrong ReferenceError,can't get local var 外部不能调用内部局部变量

//由于局部变量可以做隔离,所以block可以有效的定义并使用变量,同时防止交叉污染
const visibleLightWaves=()=>{
  let lightWaves = 'Moonlight'
  let region = 'The Arctic'
  if (region === 'The Arctic'){
    let lightWaves = 'Northern Lights'
    console.log(lightWaves)  //最内部if{}作用域的变量
  }
  console.log(lightWaves) //函数作用域中的变量
};
visibleLightWaves()     //调用函数

//局部循环的变量之间互不干扰,但一定要按照scope各自准确声明
const starCount = ()=>{
  var i = 5             //外部的i
  console.log('outside i is ',i)
  for (let i=0;i<12;i++){
    console.log('in side i is: ',i)  //循环内部的i 与外部的i互补干涉
  }
  console.log('after,outerside i is:',i)  //不因局部变量改变
};
starCount()     //调用函数



数组

用于组织和存储数据,看可以存储字符串、数字和布尔值等,并且是一种有序的结构。(类似于python中列表List)
- 元素间用逗号分隔;
- 可用array[i]索引,从0开始。
- 字符串也可以按照数组读取每一个字符

my_array = ['aaa','bbb'.'ccc']
console.log(my_array[1])    //bbb 输出
my_array[2] = 'cac'         //改变数组内容
console.log(my_array.length) //数组大小
my_array.push('back')       //后面压入
my_array.pop()              //弹出最后一个

/*数组包含一系列方法,join()将元素放入一个字符串内;slice(start,end)选取数组中元素;splice(index,n,items)删除指定位置并添加元素;shift()移除首元素并返回,unshift('items')头部添加n元素并返回后长度;**strong text**concat()连接两个数组 */


//ref:http://www.w3school.com.cn/jsref/jsref_obj_array.asp
//https://msdn.microsoft.com/zh-cn/library/htbw4ywd(v=vs.94).aspx

let condiments = ['Ketchup', 'Mustard', 'Soy Sauce', 'Sriracha'];
condiments.push('add')      //let 是块级变量,区别于var大范围变量
condiments = ['aaa']

//常量数组不可重现赋值
const utensils = ['Fork', 'Knife', 'Chopsticks', 'Spork'];
utensils.pop()
console.log(utensils)       //常量 可以更改其中的元素
utensils = ['aa']            //但是不能重新赋值 TypeError

----------





tips
1.同一类型变量可以在一行内统一声明,用逗号分隔
2.常量const类型数组不可重新赋值reassigned,但可更改内部元素