————————————————————————————————————————————

变量

  • 全局变量:在函数体外声明,全局可以使用
  • 局部变量:通过关键字var来声明

变量类型

     <script type="text/javascript">
var a;
// 十进制
a = 1;
a = 1.2;
a = -23;
a = .23e4;
a = 3e-2;
// 十六进制
a = 0xABCDE;
a = 0Xff;
// 八进制
a = 0123;
a = 01234567;
// 正负无穷大
a = 1.79e310;
a = -1.79e310;
// NaN:不是一个数字
// p.s.NaN不能和自身比较,NaN!=NaN
a = 0 / 0;
// alert(a);
// alert(isNaN(a));
var str1 = "hello";
var str2 = "world";
var str = str1 + str2;
// 转义字符,如果定界符用',内部是可以用"的
var strCh = 'a\nb\rc\t"d\\';
// alert(strCh);
// 赋不存在的值
var emptyValue;
// alert(emptyValue);
// 赋空置
var nullValue = null;
alert(nullValue);
</script>

在内存中的存储与释放(无用存储单元)

  • 收集方式:自动进行收集,可以创建任何需要的无用对象,系统会自动进行清除
  • 收集内容:收集器确定安全回收内存单元的时机,回收那些不再会被使用的值
  • 回收算法:标记和清除无用存储单元的回收算法,通过回收器周期性遍历所有变量并且给变量所引用的值做标记,如果被引用的值是对象或数组,那么会以递归的形式做标记,如果值是数或图,回收器会找到对应的值。如果没有找到对应的值,则通过回收算法来回收。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

引用JS

     <!DOCTYPE html>
<html> <head>
<!-- 调用外部文件 -->
<script type="text/javascript" src="./test.js"></script>
<!-- 使用代码屏蔽 -->
<script type="text/javascript">
<!--
alert("浏览器支持js,如果不支持则不显示该内容");
// 向控制台书写内容
console.log("hello");
//-->
</script>
<!-- 在浏览器不支持js时显示该行字 -->
<noscript>
您的浏览器不支持js,建议更换高版本的浏览器以保证您的用户体验
</noscript>
</head> <body>
<!-- 写在href中的js -->
<p><a href="javascript:confirm('您确定么?')">报名</a></p>
<!-- 写在onclick中的js -->
<p onclick="javascript:alert('onclick')">点击</p>
</body> </html>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

隐式转换

显式转换

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数调用的arguments的方法

     <script type="text/javascript">
// arguments数据类型是一个数组,可以得到我们传入的参数
function calc(x, y) {
alert(arguments[0]);
alert(arguments[1]);
alert(typeof arguments);
}
// alert(1, 2); // 通过arguments.length获取参数的个数
// 在这里调用的实参有5个,函数形参有4个,自动忽略一个,但arguments.lenth为5
// 通过arguments实现可变参数
function test(a, b, c, d) {
arguments[2] = 100;
var paramsNum = arguments.length;
var sum = 0;
for (var i = arguments.length - 1; i >= 0; i--) {
sum += arguments[i];
}
alert(sum);
}
test(1, 2, 3, 4, 5, 6);
</script>

————————————————————————————————————————————

函数

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

全局函数:见手册

  • 代码样例
     <script type="text/javascript">
/***********************************
* encodeURI()
* decodeURI()
* encodeURIComponent()
* decodeURIComponent()
***********************************/
// encodeURIComponent 在转义时会将整个URI中的所有标点符号都转义,包括分隔符/
var str = "http://www.hughdong.com/Hugh Dong,/";
document.write(encodeURI(str) + "</br>");
document.write(encodeURIComponent(str) + "</br>");
// decodeURI 无法完全解开encodeURIComponent的编码,需要对应decodeURIComponent来就解码
document.write(decodeURI(encodeURIComponent(str)) + "</br>");
document.write(decodeURIComponent(encodeURIComponent(str)) + "</br>");
document.write("<hr>")
/***********************************
* escape()
* unescape()
***********************************/
// 对字符进行转义
str = "(?!=()#%&))";
document.write(escape(str) + "</br>");
document.write(unescape(escape(str)) + "</br>");
document.write("<hr>")
/***********************************
* eval()
***********************************/
// 计算某个字符串,并执行其中的JavaScript代码
eval("document.write('eval() is called')");
document.write("<hr>")
/***********************************
* getClass(javaobj)
* 未理解,略
***********************************/
document.write("<hr>")
/***********************************
* isFinite()
* isNan()
***********************************/
// isFinite 判断不是无穷大时true
document.write(isFinite(1.79e390) + "</br>")
document.write(isFinite(-1.79e390) + "</br>")
document.write(isFinite(2) + "</br>")
// isNaN 判断不是数字时true
document.write(isNaN("hello") + "</br>")
document.write(isNaN(1.79e390) + "</br>")
document.write("<hr>")
/***********************************
* Number()
* parseFloat()
* parseInt()
* String
* 数据类型转换,略
***********************************/
document.write("<hr>")
</script>
  • 实现效果

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

匿名函数:没有函数名的函数

  • 函数表达式可以存储在变量中,变量也可以作为一个函数使用
  • 可以将匿名函数作为参数传递给其他函数,接收方函数就可以通过所传递进来的函数完成某些功能
  • 可以通过匿名函数来执行某些一次性的任务

回调函数:将函数的返回值作为参数调用来实现功能

  • 回调函数调用的函数
    • call()
    • apply()
  • 可以让我们在不做命名的情况下传递参数,这样可以节省全局变量
  • 我们可以讲一个函数调用操作委托给另一个函数,节省代码编写
  • 有助于提升性能

自调函数:不需要调用,自动执行的函数

  • 使用自调函数不会产生任何全局变量
  • 函数无法重复执行,适合执行一些一次性或初始化的任务

内部(私有)函数

  • 确保全局名字空间的纯净性,防止命名出现冲突
  • 只将一些必要的函数暴露给外部,并保留属于自己的函数,使其不被其他应用程序所调用

返回函数的函数

闭包(作用域链)

 var Test = function Calc(a, b)
{
return a + b;
}
document.write(Test(1, 2) + "</br>");
var Test1 = Test;
document.write(Test1(1, 2) + "</br>");
/*******************************
* 匿名函数,没有函数名
*******************************/
var Test2 = function (x, y)
{
return x * y;
}
var Test3 = Test2;
document.write(Test2(3, 4) + "</br>");
document.write(Test3(4, 5) + "</br>");
/*******************************
* 回调函数(匿名函数的应用)
*******************************/
// Demo1
// 通过Calc2调用T1和T2函数
function Calc2(x, y)
{
return x() + y();
}
function T1()
{
return 5;
}
function T2()
{
return 6;
}
document.write(Calc2(T1, T2) + "</br>");
// Demo2
// 调用Func1,在for循环中将abc的值先*2传入CallBack函数AddOne,将返回值存入arr数组并打印
function Func1(a, b, c, CallBack)
{
var i,
arr = [];
for (i = 0; i < 3; i++)
{
arr[i] = CallBack(arguments[i] * 2);
}
return arr;
}
function AddOne(num)
{
return num + 1;
}
document.write(Func1(3, 4, 5, AddOne) + "</br>");
// Demo3
// 或者使用匿名函数作为回调函数,同Demo2
function Func2(a, b, c, CallBack)
{
var i,
arr = [];
for (i = 0; i < 3; i++)
{
arr[i] = CallBack(arguments[i] * 2);
}
return arr;
}
document.write(Func2(5, 6, 7, function (a)
{
return a + 1
}
) + "</br>");
// Demo4
// 使用系统的call()方法
function Func4(a, b, c)
{
return a * b * c;
}
document.write(Func4.call(this, 2, 2, 2) + "</br>");
// Demo5
// apply()方法
function Func5(a, b, c)
{
return a + b + c;
}
var params = [4, 5, 9]
document.write(Func5.apply(this, params) + "</br>");
/*******************************
* 自调函数
*******************************/
(function (a, b)
{
document.write("函数自调用" + a + b);
}
)(3, 5); // 内部私有函数
// 在内部封装不想让外部使用的代码
function a(param)
{
function b(param1)
{
return param1 + 10;
}
// 在a函数体内调用b函数
return b(param);
}
// 在a函数体外不能直接调用b函数
console.log(a(5)); // 返回函数的函数
function c()
{
console.log('111');
return function ()
{
console.log('222');
}
}
// 在这里不可以直接调用c(),需要声明变量funcTest,让c()的返回值返回给funcTest
var funcTest = c();
funcTest();
// 或使用另一种形式c()();
c()(); // 重写自己的函数,用新的函数覆盖自己
function d()
{
console.log('333');
d = function ()
{
console.log('444');
}
}
// 在d函数内将新的函数内容赋给自己,第一次调用时为333并将自己重写自己的函数
console.log(d);
d();
console.log(d);
d(); // 针对不同的浏览器执行不同的代码
var e = function ()
{
function setUp()
{
console.log('setup');
} function doWhat()
{
console.log('dowhat');
}
setUp();
return doWhat;
}
();
// 打印e()代码段可以看到e的内容是doWhat(),在function(){}()末尾的()代表执行,e得到了function()返回的doWhat
console.log(e);
e();

JavaScript | 基础(变量/引用/转换/函数)的更多相关文章

  1. JavaScript基础:字符串转换函数——String()和toString()

    1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 例如将false转为字符串类型 <script>   var str = false ...

  2. php引用(&)变量引用,函数引用,对象引用和参数引用用法

    php引用(&)变量引用,函数引用,对象引用和参数引用用法   php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语 ...

  3. JavaScript 基础 (变量声明, 数据类型, 控制语句)

    创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...

  4. 前端知识体系:JavaScript基础-变量和类型

    前端工程师自检清单 1. JavaScript规定了几种语言类型 2. JavaScript对象的底层数据结构是什么 3. Symbol类型在实际开发中的应用.可手动实现一个简单的 Symbo 4. ...

  5. 【javascript基础】2、函数

    前言 我在上一篇[javascript基础]基本概念中介绍了javascript的一些基本概念,多谢大家的阅读和意见,自己写的东西可以被大家阅读,真心高兴,刚开始发布的时候我一直盯着阅读人数,虽然知道 ...

  6. JavaScript基础——变量、语句、注释

    一.变量的命名规则 1.变量名由数字.字母.下划线组成 2.变量名的首字母不能是数字,只能是字母或者下划线 3.不能使用关键字和保留字作为变量名 4.变量严格区分大小写,例如在JavaScript中o ...

  7. JavaScript:变量提升和函数提升

    第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...

  8. 【javaScript基础】马上调用函数表达式

    在javaScript中,每一个函数被调用时,都会创建一个新的运行上下文.由于在一个函数里面定义的变量和函数仅仅能在里面訪问.在外面是不行的.上下文提供了一种非常easy的方法来创建私有性. //ma ...

  9. JavaScript基础内容中的函数详解

    函数 函数:即方法 函数就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值. 为什么使用函数: 1.方便调用 2.代码重用,利于维护 3.便于修改,便于重构 4.简化逻辑,利 ...

随机推荐

  1. [mysql] 表去重

    select *, count(distinct content) from comment2 group by content

  2. 【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律

    转自:http://www.cnblogs.com/kevince/p/3887827.html 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这么一说大家心里肯定有数了吧,“不就是nex ...

  3. HDU 1285 确定比赛名次【字典序最小的拓扑排序 + 优先队列】

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  4. 链表学习二:链表反转与查找倒数第K个

    //单链表反转 ListNode* RevertList(ListNode* m_pHead){ ListNode* pCurrent = m_pHead; ListNode* pPrev=NULL; ...

  5. SNMP OID批量枚举工具

    SNMP OID批量枚举工具   SNMP信息包含大量的系统.设备信息.这些信息均使用OID方式表示.由于OID编号规则复杂,不便于记忆.为了快速通过OID批量获取指定信息,Kali Linux新增了 ...

  6. 微服务之SpringCloud实战(二):SpringCloud Eureka服务治理

    服务治理 SpringCloud Eureka是SpringCloud Netflix微服务套件的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务的服务治理功能,SpringCl ...

  7. RabbitMQ技术详解(转)

    RabbitMQ是什么 定义 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Action ...

  8. MySQL查询时区分大小写(转)

    说明:在MySQL查询时要区分大小写会涉及到两个概念character set和collation,这两个概念在表设计时或者在查询时都可以指定的,详细参考:http://www.cnblogs.com ...

  9. transform使用导致元素内字体出现模糊的坑~~~

    项目中遇到的,关于居中弹出层的字体模糊问题. 先来个对比图: 清晰版: 模糊版: 这个是一个不定宽高的弹出框,居中的方式如下代码: .layerdiv { position: fixed; top: ...

  10. webpack-dev-server最简单的应用

    1.安装 npm install webpack-dev-server --save-dev 2.再exports后加多一个对象即可 devServer: { contentBase: ". ...