20、函数的调用方式(内容尚未完全,可自行百度这方面的知识)
call()、apply()、bind() 这三个方法的作用都是改变执行环境中的this指针的指向
 
call()与apply()
这两个方法的第一个参数都为this指针指向的目标对象,他们的区别是第二个参数开始传参的方式不同
call传参:obj, arg2,arg3,.....
apply传参:obj, [arg2,arg3,..... ]
function func(a, b){
          return this.value + a + b;
}
          var obj = {
                    value: 1,
          };
          func.call(obj, 2, 3);   //6
          func.apply(obj, 2, 3);//6
          
          //call()和apply()如果第一个参数不是对象类型,那么这个参数会被自动转化为对象类型
          function func(){
               console.log(Object.prototype.toString.call(this));
          }
          func.call(2);
 
bind()
第一个参数为this指针指向的目标对象,bind方法执行后返回的是一个新函数
function func(){
  console.log(this.name);
}
var obj = {
  name: '张三',
};
var f = func.bind(obj);
f();  //张三
//在这个新的函数对象中,this被永久的绑定到了bind的第一个参数上面,五六年后期这个函数被如何使用,this都不会改变
var obj27 = {
  name: '李四',
  f: f,
};
obj2.f();  //张三
 
call()、apply()、bind()
如果这三个方法都没有提供第一个参数或者是参数是this、null、undefined中的一种,那么都将默认第一个参数的为Global对象
 
 
21、全局变量和局部变量
在函数内部声明的变量为局部变量,函数外部不能使用;
函数外部声明的变量为当前js文件的全局变量
如果没有var修饰的变量也为全局变量,这个变量在哪都可以访问
var a = 1;
function test(){
console.log(a);        //1
var b = 2;
console.log(b);       //2
test();
console.log(a);       //1
console.log(b);       // b is not defined
 
当函数内部的变量和全局变量同名,函数内部就不会使用外部的变量
var g = 100;
function testG(){
console.log(g);          //undefined
var g = 200;
console.log(g);         //200
}
testG();
console.log(g);         //100
 
22、函数的属性和方法
1)length:表示函数希望接受的命名参数的个数 
function test(a, b){
  return 'hello';
}
console.log(test.length);     //2   ---->形参的个数
test();
console.log(test());      //hello
 
2)函数作为参数 
function handle(fun){
  var msg = "hello";
  fun(msg);
}
handle(function(m){
  console.log(m);           //hello
});
 
3)函数作为返回值 
function handle2(){
  return function(){
    console.log(123);
  }
}
handle2();    //这返回的只是一个函数名
handle2()();            //123
 
23、值传递和引用传递
1)基本数据类型的传递就是值传递    不会影响上一个变量的值
var a = 1;
var b = a;
console.log(a, b);    //1 1
b = 3;
console.log(a, b);     //1 3
 
2)引用数据类型的传递就是址传递    两个变量的值会变成一模一样
var obj = {
name: 'zhangsan',
age:12,
};
var obj2 = obj;
console.log(obj, obj2);     // {name:'zhangsan',age:12,} {name:'zhangsan',age:12,}
obj2.gender = 'male';
console.log(obj, obj2);     //{name:'zhangsan',age:12, gender:'male',} {name:'zhangsan',age:12,gender:'male', }
 
24、闭包(函数访问上下文中的变量)
var arr = [];
for(var i = 0; i < 5; i++){
  arr[i] = function(){
    console.log(i);
  }
}
arr[0]();     //5
arr[1]();     //5
arr[2]();     //5
arr[3]();     //5
arr[4]();     //5
上述现象就是闭包现象
解决方法将上面的arr[i]改为下面的arr[i]
arr[i] = (function(num){
  return function(){
          console.log(num);
  };
})(i); 

前端开发HTML5——函数的更多相关文章

  1. 1+x 证书 Web 前端开发 HTML5 专项练习

    官方QQ群 1+x 证书 Web 前端开发 HTML5 专项练习 http://blog.zh66.club/index.php/archives/193/

  2. 1+x 证书 web 前端开发 HTML5 - 新增的元素,删除的元素

    官方QQ群 1+x 证书 web 前端开发 HTML5 - 新增的元素,删除的元素 http://blog.zh66.club/index.php/archives/197/

  3. js框架Modernizr是什么东西? 他是前端开发HTML5和CSS3的强有力前端js检测类库

    最近在研究modernizr的前端框架,发现这个Modernir对前端写页面非常友好,并且能够很快的建立起适应任何设备的html页面哦.在这里分享下基础教程,让大伙对modernizr是什么?做什么用 ...

  4. 前端开发HTML5——基础标签

    什么是HTML? HTML是HyperText Markup Language(超文本标记语言)的简写,他不是一种编程语言,而是一种标记语言,用于告诉浏览器如何构造你的页面.“超文本”就是指页面可以包 ...

  5. 前端开发HTML5——表单标签

    表单简介 Form表单主要用于用户与Web应用程序进行数据的交互,它允许用户将数据发给web应用程序,网页也可以拦截数据的发送以便自己使用.form通常由一到多个表单元素组成,这些表单元素是单行/多行 ...

  6. 1+x 证书 web 前端开发初级对应课程分析

    响应国家号召 1+X 证书 Web 前端开发考试样题 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/19 ...

  7. Visual Studio 2015和ASP.NET 5中可用的前端开发工具集

    最近微软发布了一本白皮书,谈到了一些可以和Visual Studio 2015和ASP.NET 5配合使用的JS/前端Web开发工具(比如:函数库.任务执行器.框架等). 由于现在前端开发的生态系统在 ...

  8. 工具-VS2015前端开发工具简介

    每个涉及的工具库都给出了入门介绍.基本概念,以及在VS和ASP.NET中的用法.这个白皮书完全就是一个非常难得的前端开发入门手册. 具体涉及到的工具库有: 流行的JS任务执行器:Grunt和Gulp. ...

  9. 响应国家号召 1+X 证书 Web 前端开发考试模拟题

    1+x证书Web前端开发初级理论考试样题2019 http://blog.zh66.club/index.php/archives/149/ 1+x证书Web前端开发初级实操考试样题2019 http ...

随机推荐

  1. Kali 无线网络

    WiFi——必备的一个东西: AP:这是无线用户接入到互联网的设备 ESSID:可以用于无限局域网中的多个AP中 BSSID:每个AP的唯一标识符 SSID:网络名称 Channels Wi-Fi可以 ...

  2. 用Toad for Oracle创建数据库表空间和用户

    打开Toad, 1,菜单栏Session—>new Connection….打开如下窗口: 2,进入之后,菜单DatebaseàSechema  Brower...找到Table Space(表 ...

  3. bayaim_杀神_全民飞机大战

    bayaim_杀神_全民飞机大战 ------------------------ 系统:IOS QQ:7742469490 王者:30 游戏名:神 级别:98 装备:满鸡 + 新战魂+ 歼31 + ...

  4. BayaiM__oracle切换归档模式步骤:

    BayaiM__oracle切换归档模式(步骤): ------------------oracle11g设置归档模式和非归档模式--------------------------[root@tes ...

  5. 数据库(update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t2 where t2.id=tab1.id))

    有t1 和 t2 两个表,表中的数据和字段如下: 执行 如下SQL语句: update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t ...

  6. JMeter配置数据库连接

    在平时接口的测试中,很多时候是需要直接连接数据库,查询对应数据信息的. 我将其中一些内容整理出来,方便以后调阅. 1.首先是配置数据库的连接,也就是JDBC Connection Configurat ...

  7. 【洛谷4045】[JSOI2009] 密码(状压+AC自动机上DP)

    点此看题面 大致题意: 给你\(n\)个字符串,问你有多少个长度为\(L\)的字符串,使得这些字符串都是它的子串.若个数不大于\(42\),按字典序输出所有方案. 状压 显然,由于\(n\)很小,我们 ...

  8. 机器学习之线性回归以及Logistic回归

    1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...

  9. codevs 3304 水果姐逛水果街Ⅰ

    这道题可以用ST表过: 题目链接 记录4个数组:maxval[][], minval[][], ans[][], rans[][] maxval[i][j]表示从i号元素开始,长度为(1<< ...

  10. Paper | One-to-Many Network for Visually Pleasing Compression Artifacts Reduction

    目录 故事 网络设计 网络前端 升采样中的平移-均值化 网络度量 训练 发表于2017年CVPR. 目标:JPEG图像去压缩失真. 主要内容: 同时使用感知损失.对抗损失和JPEG损失(已知量化间隔, ...