js 自执行函数 函数内部可以通过函数名调用本身 函数外部调用报 未定义错误

先看错误过程

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ipt-test</title>
</head>
<body>
<script>
var a=true;
!function main(){
  if(a){
    a=false;
    main();
  }
  console.log(‘main‘);
}();
main();
</script>
</body>
</html>

运行以上网页

输出两个main

第一个main 自执行部分输出

第二个main 函数内部调用自己输出的

而在函数外部调用 报错 main is not defined

初看不好理解 其实细想还是很合理的

不管是!function(){..}(),(function(){..})(),。。都是表达式  而表达式会返回值而并不会定义或声明变量

所以在函数外面调用报错 是很合理的

在函数内部调用。。。。。

时间: 2024-10-25 23:37:19

js 自执行函数 函数内部可以通过函数名调用本身 函数外部调用报 未定义错误的相关文章

(转)JS之——解决IE6、7、8使用JSON.stringify报JSON未定义错误的问题

https://blog.csdn.net/l1028386804/article/details/53439755 在通过JavaScript将对象类型的参数通过JSON.stringify转换成字符串传递时,IE6.7.8会报:“JSON”未定义 的错误.我们可以通过在html文件的head头内引入json2.js文件来解决 <!--[if lt IE 9]> <scriptsrc="json2.js"></script><![endif]

[转]setTimeout() 函数未定义错误

用 setTimeout("showMe()",1000) 时出现 showMe is not defined 错误.这是由于showMe() 函数不在 setTimeout 调用环境中.转载的这篇文章解释并解决了这一问题.原标题为: 2.3. Coding your user script ,节选自 Dive Into Greasemonkey  可在这里免费下载此书 http://diveintogreasemonkey.org/ 2.3. Coding your user scr

浅析JS异步执行机制

前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面.本文将针对JS异步执行机制进行一个简单的分析. 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有一定基础的同学是十分清楚的.timeout仅仅只会执行一次,而interval则会执行多次. setTimeout(function (args) { console.log('timeout') }, 1000); setInterval(function (args) { console.log

以对象function本身函数不同的创建 car 的类型数据来重复或许做更换(开发)

创建Car的数据类型程序 // function car () { } // 创建的共享方法 car . prototype. shift = function () { alert ( this . color +" 汽车 " ) : } 选择格式在C++ 代码中比较常见,格式可类似更新下面如: //创建car 类型 function car () { if (car . prototype shift ) { // if 语句内只可以执行一次 car . prototype.shi

js中 $ 未定义 或者 “xxx”未定义

js中出现 $ 未定义 或者 "xxx"未定义 错误原因 : js传值时用的是el表达式,如果不加单引号就会出错,正确写法如下:

js立即执行函数的使用

一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号 (function(){alert(1);})(); 方式3.function前面加运算符,常见的是!与void !function(){alert(1);}();  void function(){alert(2);}(); 二.立即执行函数的参数 可以给立即执行函数传递参数,例如 (function(who, when){     console.lo

js立即执行函数用法

js立即执行函数可以让你的函数在创建后立即执行,js立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行. 一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号 (function(){alert(1);})(); 方式3.function前面加运算符,常见的是!与void !function(){alert(1);}(); void

JS 自执行函数

由于自己js基础知识薄弱,很多js的知识还没有掌握,所以接下来会经常写一些关于js基础知识的博客,也算给自己提个醒吧. js自执行函数,听到这个名字,首先会联想到函数.接下来,我来定义一个函数: function aaa(a,b){ return sum = a + b } 定义了一个名为aaa的函数,在里面可以计算两个数的和.如果想执行它,就必须得调用它,并且还得给它传参: var aa = aaa(1,2) 这样就实现了一个函数的定义与调用,通过console.log我们可以看到sum实现了

js函数的内部属性---arguments,callee,caller

在接下来的几篇文章中,我大家谈谈函数的内部属性,arguments,callee,caller (1)arguments,是一个类数组对象,其中包含了传入函数的所有参数,主要用途是,保存函数的参数: 代码1: function aa(b){alert(arguments);} aa(4); function aa(a,b,c,d){alert(arguments.length);} aa(1,2,3,4); function aa(a,b,c,d){alert(arguments[2]);} a