JS自学笔记03

1、函数练习:

如果函数所需参数为数组,在声明和定义时按照普通变量名书写参数列表,在编写函数体内容时体现其为一个数组即可,再传参时可以直接将具体的数组传进去

  1. var max=getArratMax([1,4,2,6,8,2,5]);

关于说明:

  1. /**
  2. *函数的说明
  3. *@param array参数为一数组//解释说明参数列表
  4. *returns //解释说明返回值
  5. *
  6. *
  7. /
  8. 当有人需要查看该函数的说明时,使用ctrl+左键点击函数名即可访问以上注释

  1. //输入年月日,获取这个日期是这一年的多少天
  2. function getDates(years,month,day){
  3. var days=day;
  4. if(month==1){
  5. return days;
  6. }
  7. var months=[31,28,31,30,31,30,31,31,30,31,30,31];
  8. }
  9. for(var i=0;i<month-1;i++){
  10. days+=months[i];
  11. }
  12. //判断是否为闰年
  13. if(year%4==0&&year%100==0&&year%400==0&&month>2)
  14. {
  15. days++;
  16. }
  17. return days;

2、arguments对象

定义一个函数,若不确定用户是否传入了多少参数,此时若知道了参数的个数,就可继续进行运算

arguments.length可获取当前参数列表的参数个数

只使用arguments对象可以查看当前所传参数

3、函数的其他定义方式

1)命名函数:函数具有函数名,函数名存储的是函数代码

匿名函数:函数不具有函数名,不能直接调用

2)函数表达式的定义方式:

  1. var 变量名=function(...){...};
  2. f(...);//调用函数
  1. function f(){
  2. console.log("你好");
  3. }
  4. console.log(f);//将输出f函数的代码
  1. var f1=function(){
  2. console.log("你好");
  3. }
  4. f1();//你好
  5. f1=function(){
  6. console.log("您好");
  7. };
  8. f1();//您好
  9. //根据函数名存储的是函数代码的原理
  10. (function(){console.log("你好")})();
  11. 函数的自调用,没有名字,声明的同时直接调用
  12. 一次性的

函数同时也是一数据类型,function型,可作为参数使用

注意,作参数时不需要带括号,被称为回调函数

  1. function f1(fn){
  2. fn();
  3. }
  4. function f2(){
  5. console.log(你好);
  6. }
  7. f1(f2);

函数也可作为返回值被使用

  1. function f(){
  2. console.log("你好");
  3. return function(){console.log("输出")}
  4. }
  5. var ff=f();//调用
  6. ff();

4、作用域

1)全局变量:

该变量是由var声明的,为全局变量,可以在页面的任何位置使用。如果页面不关闭,该变量将一直占有内存空间不被释放

局部变量:在函数内部的变量是局部变量,外边不可使用。除了函数以外,其他的任何位置定义的变量都是全局变量

块级作用域:{}一对大括号可视为一块,在这对括号内定义的变量只能在该块内使用。js中不存在块级作用域,在块内声明的变量也可以在块外使用,函数除外。

全局作用域:全局变量的使用范围

局部作用域:局部变量的使用范围

隐式全局变量:不使用var声明变量,被称为隐式全局变量,可以被delete关键字删除并释放,全局变量则不能;并且隐式全局变量使用在函数内,外界仍可直接访问该变量。

2)作用域链

5、预解析

1)提前解析代码

把变量及函数的声明提前。把变量声明提前到当前所在作用域最上面。把函数声明提前到当前所在作用域最上面。先提升var,再提升function

  1. console.log(num);
  2. var num=10;//系统预解析该条指令中的声明部分,上述输出语句将输出undefined
  1. f();//输出undefined,就算没有下面10的赋值语句也是undefined,因为都只会把声明提前,然后执行函数
  2. var num=20;
  3. function f(){
  4. console.log(num);
  5. var num=10;
  6. }

案例:

  1. function f1(){
  2. console.log(num);
  3. var num=10;
  4. }
  5. f1();//输出undefined
  6. console.log(num);//访问不到,报错
  7. 预解析中,变量的提升,只会在当前的作用域中提升,提升到当前作用域的最上面。函数中的变量只会提升到函数的作用域中的最前面,不会出去
  8. 预解析会分段。不同对script标签中的重名函数预解析不会发生冲突
  1. var a=25;
  2. function abc(){
  3. alert(a);
  4. var a=10;
  5. }
  6. abc();//undefined
  7. console.log(a);// 25
  8. console.log(a);//输出函数体内容
  9. function a(){
  10. console.log('aaaa');
  11. }
  12. var a=1;
  13. console.log(a);//1
  1. var a=b=c=9;
  2. //其中a为全局变量,在函数体内定义时只在体内有效。b,c是隐式全局变量,全场有效
  1. f1();//报错
  2. var f1=function(){
  3. console.log(a);
  4. var a=10;
  5. }

JS自学笔记03的更多相关文章

  1. JS自学笔记05

    JS自学笔记05 1.例题 产生随机的16进制颜色 function getColor(){ var str="#"; var arr=["0","1 ...

  2. JS自学笔记04

    JS自学笔记04 arguments[索引] 实参的值 1.对象 1)创建对象 ①调用系统的构造函数创建对象 var obj=new Object(); //添加属性.对象.名字=值; obj.nam ...

  3. JS自学笔记02

    JS自学笔记02 1.复习 js是一门解释性语言,遇到一行代码就执行一行代码 2.查阅mdn web文档 3.提示用户输入并接收,相比之下,alert只有提示的作用: prompt(字符串) 接收: ...

  4. JS自学笔记01

    JS自学笔记01 1.开发工具 webstorm 2.js(javascript) 是一门脚本.解释性.动态类型.基于对象的语言 含三个部分: ECMAScript标准–java基本语法 DOM(Do ...

  5. Node.js自学笔记之回调函数

    写在前面:如果你是一个前端程序员,你不懂得像PHP.Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择.这段时间对node.js进行了简单的学习,在这里 ...

  6. 老男孩Python全栈开发(92天全)视频教程 自学笔记03

    day3课程目录: pyhton的历史 32bit和64bit系统的区别 Python版本的选择 第一个pyhton程序 文件后缀名及系统环境变量的介绍 pyhton程序的执行和其他编程语言的简单对比 ...

  7. JAVA自学笔记03

    1.三目运算符 1)格式:(关系表达式)?表达式1:表达式2 true则执行表达式1,false则执行表达式2 @ 例题1 :求两数中的较大值 System.out.println(x>y?x: ...

  8. JavaScript自学笔记(1)---表单验证,let和const,JSON文件

    今天开个JS自学笔记,本身JS的语法很简单,如果学过Java或者C系的都很容易,就不讨论了.主要是讨论实际应用的问题. 1.表单验证: a.html自动验证: HTML 表单验证可以通过浏览器来自动完 ...

  9. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

随机推荐

  1. Zookeeper(一)CentOS7.5搭建Zookeeper3.4.12集群与命令行操作

    一. 分布式安装部署 1.0 下载地址 官网首页: https://zookeeper.apache.org/ 下载地址: http://mirror.bit.edu.cn/apache/zookee ...

  2. Adjoint operators $T_K$ and $T_{K^{*}}$ in BEM

    In our last article, we introduced four integral operators in the boundary integral equations in BEM ...

  3. [转]编程珠玑第五章二分搜索(折半查找)之java实现

    http://blog.csdn.net/hwe_xc/article/details/51813080 二分搜索又称为折半查找,用来高效快速的解决如下问题: 我们需要确定排序后的数组x[0..n-1 ...

  4. Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型

    Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型 cmds.ls() 的 flags 中没有指明 uvs 等这 ...

  5. jOOR

    --摘自<android插件化开发指南> 1.jOOR库就一个Reflect.java类很重要 2.Reflect.java包括6个核心方法 1)on:包裹一个类或者对象,表示在这个类或对 ...

  6. Android Studio项目生成Jar包

    步骤: 1)在module的gradle文件中,将apply plugin:'com.android.application'改为apply plugin:'com.android.library' ...

  7. Pushing Boxes POJ - 1475 (嵌套bfs)

    Imagine you are standing inside a two-dimensional maze composed of square cells which may or may not ...

  8. hibernate.properties not found

    在配置hibernate的主键生成策略的时候突然报出如下错误,寻找了很长时间,虽然不是什么严重的错误,但是希望可以警醒自己 问题: 11:26:21,611 INFO Version:37 - HHH ...

  9. [ 严重 ] my网SQL注入

    RANK  80 金币    100 数据包 POST maoyan.com/sendapp HTTP/1.1Host: xxx.maoyan.comUser-Agent: Mozilla/5.0 ( ...

  10. PostgreSQL 的命令行工具 psql 的常用命令

    1. 连接服务器: psql -h 192.168.1.88 -U username -d databasename 2. 切换数据库: \c dbname 3. 列出所有数据库: \l 4. 列出所 ...