1 :Try{}catch(){}finally{}catch会捕获到前面抛出的异常,无论是直接抛出的还是函数调用的异常。如果想要区分这两种异常。可以使用构造器实现。
2:无论发生了什么?finallly是永远都会执行的东西。
3:形参是在函数创建的时候括号里面写的东西,实参是在调用函数的时候添加的具体值。
4: 函数声明:function add(x,y){return a+b};
5:函数表达式 var add=function(x,y){retrurn a+b;}
6: 大多数的Js引擎对于函数对象都会提供一个非标准的name属性,这个对与debug非常有用。
7:在定义函数的时候应该使用函数声明:第一是可以函数提升,第二是他们具有名字。
8:控制函数的调用:func.apply(thisValue,argArray)
9: apply()用在一个函数需要以类似数组的形式接受多个参数,在非面向对象的调用中他是不必要的,这里我们把它设定为null.thisValue这个值是用来制定这个函数执行时this的值。
10: bind(thisValue,rg1...argN)会执行原函数的函数功能,他会创立一个新的函数,这个函数会调用原函数,并将this替换为Thisvalue,同时应用以下参数。
11:function add(x,y){return x+y} var ad=add.bind(null,1,2,3,4,5,6,7);
12: 参数缺失的时候:形参会被赋予undefined,实参数量多于形参,多余的参数会被忽略。
13:arguments是数组但又是非数组的。一方面,他有一个length属性,所有的参数都可以通过索引值来读写。他是一个对象,支持所有的对象的方法和操作。
14: 强制性参数,限制参数的最小值。可选参数。通过检测传入的参数的值来时先这一操作。单独使用这一种检测方法会出现漏洞。。。
15:非预期的可选参数:如果你要将一个函数c作为另一个函数f的参数引入,那么你需要注意一下另种情况:1:函数f签名声明需要传入的参数。f可能提供多个参数,C决定使用哪个参数。2:C的实际签名,他可能支持的可选参数。
[1,2,3].map(function(x){return parseInt(x,10)});必须格外声明函数接受哪些参数,同事你会传入哪些参数。
16: 具名参数的优点:他对函数的参数进行了描述,同属对于可选参数的场景的实现也很有帮助。在JS中模拟具名参数。将对象作为一个实参传入函数。function add(numbers){number=numbers||{};var num1=oprions.start||0;var num2=numbers}
14: 变量的作用域指的是变量在何处可以访问到。
15:js的变量是函数作用域级别的,不像其他的语言,是以块来划分作用域的,在js中,只有函数可以创建新的作用域。
16:举个例子就是说,如果你不想总的变量被污染,就可以做一个立即执行函数,把变量包起来。以实现对块的模拟。对于立即执行函数来说。有以下需要注意的:他必须是个表达式,而且后面必须有分号。如果在两个立即执行函数中间漏掉分号,那么系统就会认为他们两个是一个函数调用,前面是函数,后面是变量。
17:其他两种方式:!function(){console.log("123")}(); void function(){console.log("hahah")}();就和后面加分号没关系了。。。
18:var x=23;(function(){var t=x2;console.log(t)}());(function (t){console.log(t)}(x2));一开始--后来
19:立即执行函数的应用:避免全局变量,隐藏全局作用域的变量。创建新环境避免共享。保持全局对象对于构造器函数的相对独立。
网友评论