js閉包與封閉函式與其他知識點

weixin_34249678發表於2018-12-04

閉包函式

1.封閉函式是javascript中匿名函式的另外一種寫法,建立一個一開始就執行而不用命名的函式
2.(function(){...})();還可以在函式定義前加上"~"或者"!"符號來定義匿名函式
(function(){
var str = '歡迎訪問我的主頁';
alert(str);
a++;
})();
!function(){
var str = '歡迎訪問我的主頁';
alert(str);
a++;
}();
~function(){
var str = '歡迎訪問我的主頁';
alert(str);
a++;
}()

閉包

函式巢狀函式,內部函式可以引用外部函式的引數和變數,引數和變數不會被垃圾回收機制收回
function aaa(a){
var b = 5;
function bbb(){
a++;
b++;
alert(a);
alert(b);
}
return bbb;
}
var ccc = aaa(2);
ccc();
ccc();

改寫成封閉函式的形式

var ccc = (function(a){
var b = 5;
function bbb(){
a++;
b++;
alert(a);
alert(b);
}
return bbb;
})(2);
ccc();
ccc();

獲取位址列引數

<html>
<head>
</head>
<body>
<script type="text/javascript">
alert(GetQueryString("id"));
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;}
</script>
</body>
</html>

函式的繼承

非常純粹的繼承關係,例項是子類的例項,也是父類的例項
父類新增原型方法/原型屬性,子類都能訪問到
/ 定義一個動物類
function Animal (name) {
// 屬性
this.name = name || 'Animal';
// 例項方法
this.sleep = function(){
console.log(this.name + '正在睡覺!');
}
}
// 原型方法
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
};

call和Apple

call的方法
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
呼叫一個物件的一個方法,以另一個物件替換當前物件
call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 thisObj 指定的新物件
Apple方法
apply([thisObj[,argArray]])
應用某一物件的一個方法,用另一個物件替換當前物件

實現繼承

function Animal(name){
  this.name = name;
  this.showName=function(){
    alert(this.name);
  }
}
functionCat(name){
  Animal.call(this,name);
}
varcat=newCat("BlackCat");
cat.showName();

多重繼承

function Class10()
{
this.showSub = function(a,b)
{
alert(a-b);
}
}
function Class11()
{
this.showAdd = function(a,b)
{
alert(a+b);
}
}
function Class2()
{
Class10.call(this);
Class11.call(this);
}

新選擇器

querySelector:根據選擇器規則返回第一個符合要求的元素
querySelectorAll:根據選擇器規則返回所有符合要求的元素

相關文章