1.万物皆为对象

  提起函数首先要知道对象,而对象又是js数据类型中的一种,所以我们从头开始。

  1)javascript数据类型有哪些?
          原始数据类型:number,undefined,null,string,boolean

     引用数据类型:object

  2)数据类型的检测:

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.

typeof   123   //Number

typeof   'abc'  //String

typeof    true       //Boolean

typeof    undefined   //Undefined

typeof    null        //Object

typeof    { }           //Object

typeof    [ ]           //Object

typeof    console.log()       //Function

null类型进行typeof操作符后,结果是object,原因在于,null类型被当做一个空对象引用。

面试会遇到的坑:

    typeof(需要检测的内容) -- number,string,boolean,function,object,undefined (返回的结果类型都是string类型)。

    typeof(null)    返回的结果类型为object

  3)引用数据类型:

  对象都有自己的属性和方法: 

function fun(a,b,c){    //函数类对象

}
console.log(fun) //fun它也是window对象底下的属性
//fun自己的属性
console.log(fun.name) //输出函数的函数名
console.log(fun.length) //形参的个数
console.log(fun.prototype) //原型 //函数也是可以直接当成对象使用的
//对象的增删查改
fun.abc = 123;        //增
   fun.bcd = function(){    //增一个特殊的元素
      console.log("hello")
   }
   fun.bcd();
fun.abc;   //查
fun.abc = 456;  //改
console.log(fun.abc);
delete fun.abc;    //删

   


  4)原始数据类型:

    可以改变的引用类型,和不可以改变的原始类型(这个地方的改变和不改变表示的是存储结构);

var s = 'hello';
s.toUpperCase(); //返回'HELLO',但是并没有改变s的值
alert(s); //返回 hello;
var a=1;
//这行语句中包含了两个量:一个是a,他叫变量,这个大多数人都知道;一个是1,他叫数值型常量,这个大多数人都会忽略,以为一个数字、字符串、布尔值跟常量变量扯不上关系。不要以为1不算“量”,1就是值恒为1的常量,2就是值恒为2的常量...
var a=false;
//同上,a是布尔型变量,false是布尔型常量,他的值不能被改变,false永远代表false;
var a='abc';
//同理,'abc'叫字符型常量,或者叫字符串常量。还记得经典的JS报错“未结束的字符串常量”么?意思就是没找到到一个字符串常量的结束符:引号。
//综上,所有为固定值永恒不变的量就是常量,也就是不可变的量。
//其他很多语言可以用const关键字定义一个自己命名的常量,JS中没有用const去定义一个常量的功能,可以定义一个变量当“常量”用,自己别改就行。

    原始类型属性的添加;


var str = "hello world";
str.abc = 123; //自己添加属性
console.log(str.length)   //自己自带的属性

console.log(str.abc)  //原始类型不能添加属性,如果添加,不会报错,添加完成系统检测为原始类型后马上删除

    当用new的方式创建一个字符串时:(此时为一个对象,数据类型自然变成了引用数据类型)

var str2 = new String("hello world");    //一定出来的是对象
console.log(str2.length)
str2.abc = 456;
console.log(str2.abc);

   number等其他类型也一样:

 var num = 123;
num.abc = 456;
console.log(num.abc) var numobj = new Number(123);
numobj.abc = 456;
console.log(numobj.abc)

  实例:

var str = "hello world";

            var len = typeof(str);    

            if(len.length == 6){
len.abc = "typeof检测的结果为string类型";
} console.log(len.abc); //最后输出的是什么?
输出的是undefined,len.length=6可以走进循环,只是len是原始数据类型,可以添加,但是添加完成马上就删除了。

2.函数作用域

在JavaScript中,ES6以前有三种情况:
 1.全局作用域

  var num = 100;
function fun(){
console.log(num)
var num1 = 200;
function fun2(){
console.log(num1);
}
}
fun()

    使用var声明的变量不是全局就是局部,不是用var声明的变量都是全局变量

   2.函数作用域 (局部作用域)

function fun(){
num = 100;
}
fun();
console.log(num);

    函数如果不调用,永远不会执行,管你里面的代码是什么东西,再多的错误不执行也是不会抛出的

   3.es6中有块级作用域

  过去,javascript缺乏块级作用域,var声明时的声明提升、属性变量等行为让人困惑。ES6的新语法可以帮助我们更好地控制作用域。(这一部分待后续完善)

3.函数声明和函数表达式

  函数声明

    function fun(){
//函数声明
}

  函数表达式

  var abc = function fun(a,b,c,d){    //函数表达式
console.log("hello")
}

// 调用abc?fun?
   abc();
   fun();        //会报错

console.log(abc.name) //除了这个地方可以看到fun以外,其他没有任何用处
   console.log(fun.name)//会报错

console.log(abc.length)
   console.log(fun.length)

    abc这个时候就是一个函数,当abc变成了表达式以后,函数就会放弃自己的名字,所以要调用abc()。

函数表达式和函数声明的区别:

function fun(){    //函数声明
console.log("hello");
}()

  

函数声明是直接可以被执行符号执行的,在函数的前面可以加上+-!可以让函数声明变成函数表达式
+function fun(){    //函数声明变成函数表达式
console.log("hello");
}() -function fun(){
console.log("hello");
}() !function fun(){
console.log("hello");
}()

4.立即执行函数

1.特点:

1.函数声明了以后直接自己执行,用函数的返回值,适合做初始化的工作
  2.避免写全局变量,所有的内容全部都放在立即执行函数中

2.格式:

//1.
(function(){})() //2.
(function(){ }())

  3.功能:

   1)初始化

//1加到100的值
var he = (function(n){
var num = 0;
for(var i = 1;i<=n;i++){
num+=i;
}
return num;
})(100);

   2)功能型

   写功能型的时候,在立即执行函数前面加上分号
;(function(){       console.log(456)})()

JS函数浅析(一)的更多相关文章

  1. 3.3 js函数

    1.函数语法: 函数声明的方式:function 函数名(参数1,参数2-){//函数体;}函数调用:函数名(参数1,参数2-); 函数内不一定都指定返回值. 如果需要指定返回值,可用 return ...

  2. Js函数function基础理解

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  3. js函数表达式和函数声明的区别

    我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...

  4. 通用js函数集锦<来源于网络> 【二】

    通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...

  5. 通用js函数集锦<来源于网络/自己> 【一】

    通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用 ...

  6. 100多个基础常用JS函数和语法集合大全

    网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ...

  7. JS函数

    1.document.write(""); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4.一个浏 ...

  8. js函数和运算符

    函数是由事件驱动或者它被调用时执行可重复使用的代码块. <script> function myFunction(){ Alert(“hello World!”): } </scri ...

  9. JavaScript学习03 JS函数

    JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...

随机推荐

  1. Python 爬虫修养-处理动态网页

    Python 爬虫修养-处理动态网页 本文转自:i春秋社区 0x01 前言 在进行爬虫开发的过程中,我们会遇到很多的棘手的问题,当然对于普通的问题比如 UA 等修改的问题,我们并不在讨论范围,既然要将 ...

  2. JMagic 操作 ImageMagick 处理图片

    项目描述 imagemagick是功能强大的图片处理库,以稳定及高效率著称,众多语言对该库进行封装处理.比如php.java.由于我们是java项目,直接使用java通过JNI技术调用ImageMag ...

  3. 《Java 多线程编程核心技术》- 笔记

    作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...

  4. Aseprite入门教程

    因为最近在学cocos2d-x和vs搭配做手机游戏开发,想自己做一些素材,所以找到了这款软件,Aseprite v1.1.12.刚安装上时也是不懂该怎么操作,随着逐渐地摸索,对初始的使用有了一些了解. ...

  5. HTML百宝箱(1从0开始)

    标准格式(XHTML) l   元素必须正确嵌套 l   元素必须始终关闭 l   元素名和属性名必须小写 l   文档必须有且仅有一个根元素 l   属性值必须使用双引号括起来 l   声明文档为标 ...

  6. MYSQL服务器系统变量

    一:查看服务所有变量 MySQL服务器维护许多配置其操作的系统变量.每个系统变量都有一个默认值.可以使用命令行或选项文件中的选项在服务器启动时设置系统变量.其中大多数都可以在运行时使用动态更改 SET ...

  7. vue搭建多页面开发环境

    自从习惯开发了单页面应用,对多页面的页面间的相互跳转间没有过渡效果.难维护极度反感.但是最近公司技术老大说,当一个应用越来越大的时候单页面模式应付不来,但是没讲怎么应付不来,所以还得自己去复习一遍这两 ...

  8. 【sping揭秘】25、Spring远程方案

    分化:RMI,EJB,Hessian Spring有 Rmi,http,hessian,burlap 基于rmi的remoting方案 RMI要求远程类对象包路径和本地一致 基于HTTP的轻量级rem ...

  9. ASCII码字符串普通加密解密-android

    //android后台Java //ASCII加密 String str = e.getText().toString(); StringBuilder s = new StringBuilder() ...

  10. 微软Cloud+AI本地化社区贡献指南

    本文主要介绍微软Cloud+AI本地化社区,以及通过多种途径贡献本地化的操作指南. 什么是本地化社区 Cloud+AI本地化社区是微软技术社区的组成部分之一,负责对微软官方技术文档本地化的支持工作.微 ...