作用域:变量起作用范围
全局作用域 : 在的数体中作用范围
(在function外定义的变量)
局部作用域 :
整个js全局起作用(在function内定义的变量)
访问规则:当级==》上级==》全局==》全局找不到报错
赋值规则:当级==》上级==》全局==》声明一个变量后赋值
递归函数:函数自身调用自身
注意 :必须有结束条件和改变递归条件
递归解决那些问题?后面结果由前面推导出来,可以采用递归简化实现
function f(n){
if(n == 1){
return 1
}
return f(n-1) * n
}
var m = f(4)
console.log('前三项乘积',m)
对象:对象 》Object 属性名:属性值,
创建对象
var jackObj = {} //创建空对象
var jackObj = {
name:'jack', //姓名属性 => name属性名和jack属性值构成
age:18, // 年龄属性 => age属性名和18属性值构成
sex:'男' // 性别属性
}
复杂数据类型
var obj = {name:'jakc',age:18}
obj 数据类型名 -> Object
四、创建对象-new语句
字面量方式
var obj = {
name:'jack',
age:18
}
构造函数方式
var obj = new Object() //空对象
obj.name = 'jack',
obj.age = 18
<script>
// 创建一个姓名是jack,年龄是18岁,性别是男的对象
// obj称为对象名, 也可以叫引用变量
// 通过对象名访问对象属性 对象名.属性名 ->属性值
// 1.创建对象
var obj = {
name:'jack',
age:18,
sex:'男'
}
// 2. 访问属性的值
console.log('name :', obj.name)
console.log('age :',obj.age)
console.log('sex :',obj.sex)
// 3. 修改属性值
obj.name = 'rose'
console.log('name ',obj.name)
console.log(obj)
// 4. 删除属性
// delete obj.name
console.log(obj)
// 5. 添加属性
obj.score = 98
console.log(obj)
// 6. 遍历对象 for-in
for(var key in obj){
// key = 'name' key='age' ...
console.log('key ',key, ' value ',obj[key])
}
// 7. 访问属性值,属性名是变量情况
console.log( 'name ',obj.name)
var _name = 'name'
console.log(obj[_name])
console.log(obj['name'])
<script>
//1. 创建数组
var arr = [10, 20, 30, 40]
// 0 1 2 3
//2. 访问数组元素
console.log('arr[0] :', arr[0], ' arr[1] :', arr[1])
//3. 数组长度
console.log('length >> :', arr.length)
//4. 遍历数组, 循环变量表示数组索引号从0开始
for (var i = 0; i < arr.length; i++) {
console.log(arr[i])
}
// 5. 构造函数创建数组
var arr1 = new Array(100, 200, 300, 400, 500)
for (var i = 0; i < arr1.length; i++) {
console.log(arr1[i])
}
// 6. 创建数组只有一个元素, 表示创建一个空数组长度是5 length=5
var arr2 = new Array(5)
console.log('arr2.length >>> ', arr2.length)
for (var i = 0; i < arr2.length; i++) {
console.log(arr2[i])
}
// 7. 直接控制台打印
console.log(arr);
</script>