对函数中参数的理解
在函数体内部可以通过arguments对象知道函数传了几个参数并访问传的参数的值。
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
//20
doAdd(10);
//50
doAdd(30, 20);
如果在函数体内重置传进来的参数呢?
function doAdd(num1, num2) {
arguments[1] = 10;
alert(arguments[0] + num2);
}
arguments对象的值会自动反映到对应的命名参数,但是读取arguments[1]
和num2
访问的并不是同一个内存空间,他们的内存空间是独立的,但是他们的值是相同的。
doAdd(9); // 此时 num2 的值是undefined,如同定义了变量没有初始化是一样的
js函数不能被重载
如果定义了两个相同名字的函数,则调用的时候,会执行后定义的这个函数的函数体内的代码。
js有哪些数据类型?
5种基本数据类型:String
Number
Boolean
Null
Undefined
1种复杂数据类型:Object
typeof
操作符返回值:
string
-
number
如果这个值是数值 boolean
-
undefined
如果这个值未定义 function
-
object
如果这个值是对象或者null
函数的定义和调用
第一种:函数表达式
第二种:函数声明
闭包到底怎么理解?
闭包属于函数表达式中的内容,他是一种函数类型,能访问另一个函数作用域中的变量。
- 怎么创建闭包?
在一个函数内创建另一个函数
作用域链
当一个函数第一次被调用时:
- 会创建一个执行环境
execution context
和相应的作用域链, - 并把作用域链赋值给一个特殊的内部属性
[[Scope]]
- 使用
this
arguments
和其他命名参数的值来初始化函数的活动对象activation object
在作用域链中,外部函数的活动对象始终处于第二位,
外部函数的外部函数的活动对象始终处于第三位,
直到全局执行环境。
js中的递归
递归函数是指在自身的函数体内调用自身。
js中的
onclick
和addEventListener('click')
,这两种绑定点击事件的区别是什么?
--
js中的冒泡事件是什么?
--
你知道Js中的事件委托吗?
在为一连串的dom对象添加事件的时候,事件委托就起了很大的作用了。
js中的try catch平时用的多吗?什么情况下需要去处理异常呢?
--
js中会存在哪些常见的错误呢?又该如何去处理这些错误或者避免这些错误?
--