Javascript 如何隐藏功能
嗨 我有一个包含javascript文件的主文件 在我的javascript文件中,我有这个Javascript 如何隐藏功能,javascript,jquery,javascript-framework,Javascript,Jquery,Javascript Framework,嗨 我有一个包含javascript文件的主文件 在我的javascript文件中,我有这个 $(document).ready(function(){ //some functions here }); 我希望所有的函数都可以在这个页面上使用,我知道你可以通过如下操作将它们隐藏在javascript的外部世界中 (function(){ $document.ready(function(){ //my functions )}; }).init(); var mySpace = {
$(document).ready(function(){
//some functions here
});
我希望所有的函数都可以在这个页面上使用,我知道你可以通过如下操作将它们隐藏在javascript的外部世界中
(function(){
$document.ready(function(){
//my functions
)};
}).init();
var mySpace = {};
mySpace.init = function() {
// your init functions here
};
但我不能100%确定它会被称为什么,或者它是否是正确的方式
任何一个对此有所了解的人都会帮上大忙 就像第一条评论说的,你不能对用户隐藏他们,如果他们真的想看,他们会看到的。 如果你真的想,你可以用某种方式清理它们,比如
(function(){
$document.ready(function(){
//my functions
)};
}).init();
var mySpace = {};
mySpace.init = function() {
// your init functions here
};
准备好了吗,你只要打电话
mySpace.init();
我不确定这是否是你想要的,但这是我理解问题的方式,就像第一条评论说你不能向用户隐藏他们,如果他们真的想看,他们会看到的。
(function(){
var secret1 = function(msg) {console.log("Secret Message:" + msg);}
$document.ready(function(){
secret1("this can only be called from within");
)};
})();
secret1("this will cause a script error");
如果你真的想,你可以用某种方式清理它们,比如
(function(){
$document.ready(function(){
//my functions
)};
}).init();
var mySpace = {};
mySpace.init = function() {
// your init functions here
};
准备好了吗,你只要打电话
mySpace.init();
我不确定这是否是您想要的,但这是我理解问题的方式。听起来您正在寻找的是一个“javascript模糊器”。这是一个例子。这使得代码更难阅读和复制。但正如其他人所说,您实际上无法完全隐藏javascript。听起来您正在寻找的东西是一个“javascript模糊器”。这是一个例子。这使得代码更难阅读和复制。但正如其他人所说,您实际上无法完全隐藏javascript。在javascript中,函数中声明的所有内容都只能在该函数中使用(除非您声明的变量没有关键字var)
(function(){
var secret1 = function(msg) {console.log("Secret Message:" + msg);}
$document.ready(function(){
secret1("this can only be called from within");
)};
})();
secret1("this will cause a script error");
(function() {
var doStuff = function() {
// Not Accessible
console.log('You can\'t reach me!');
}
return {
'init': function() {
// Accessible
doStuff();
}
}
})().init();
因此,传递给$().ready()的函数中的所有内容仅在该函数中可用
$(document).ready(function () {
//all code here is scoped inside this function, so it can't be accessed
// outside of this function
});
在javascript中,函数内声明的所有内容仅在该函数内可用(除非您声明的变量没有关键字var) 因此,传递给$().ready()的函数中的所有内容仅在该函数中可用
$(document).ready(function () {
//all code here is scoped inside this function, so it can't be accessed
// outside of this function
});
这里的问题是JavaScript本质上是一种客户端脚本语言,除非使用服务器端JavaScript应用程序,如 只要JavaScript以这种方式使用,整个代码都将被下载,就像从网站下载.txt文件一样。唯一真正的区别是“.js”扩展及其在html
标记或AJAX调用中的包含将强制用户的浏览器将其呈现为JavaScript
但是,如果您想让用户更难找到脚本,这是可行的。我建议您的网站通过AJAX检索脚本并将其附加到DOM中。你可以通过使用或将你的脚本制作成一个“应用程序”来实现这一点。该脚本不会作为链接出现在DOM中,用户实际上需要搜索它。您可以通过脚本使其变得更加困难(而不损害站点的完整性)。这将使它运行得更快,同时无意中降低前端的可读性。这里的问题是,JavaScript本质上是一种客户端脚本语言,除非使用服务器端JavaScript应用程序,如 只要JavaScript以这种方式使用,整个代码都将被下载,就像从网站下载.txt文件一样。唯一真正的区别是“.js”扩展及其在html
标记或AJAX调用中的包含将强制用户的浏览器将其呈现为JavaScript
但是,如果您想让用户更难找到脚本,这是可行的。我建议您的网站通过AJAX检索脚本并将其附加到DOM中。你可以通过使用或将你的脚本制作成一个“应用程序”来实现这一点。该脚本不会作为链接出现在DOM中,用户实际上需要搜索它。您可以通过脚本使其变得更加困难(而不损害站点的完整性)。这将使其运行更快,同时无意中降低前端的可读性。在JavaScript中,只有函数作用域(try-catch中的异常参数是异常)。ES5将允许您使用
let
(没有双关语)来实现块范围,但在大多数UAs实现之前,它不会有用
因此,如果使用outside是指dom就绪事件之外,那么您的函数对外部世界是隐藏的
$( document ).ready( function () {
var myFunc = function () {};
} );
myFunc();// <- ReferenceError: myFunc is not defined
$(文档).ready(函数(){
var myFunc=函数(){};
} );
myFunc();// 在JavaScript中,只有函数作用域(try-catch中的异常参数是异常)。ES5将允许您使用let
(没有双关语)来实现块范围,但在大多数UAs实现之前,它不会有用
因此,如果使用outside是指dom就绪事件之外,那么您的函数对外部世界是隐藏的
$( document ).ready( function () {
var myFunc = function () {};
} );
myFunc();// <- ReferenceError: myFunc is not defined
$(文档).ready(函数(){
var myFunc=函数(){};
} );
myFunc();// 您无法真正隐藏函数,因为它位于客户端下载的文件的源代码中,但您可以使其隐藏,以便它们无法从javascript访问您的函数
(function() {
var doStuff = function() {
// Not Accessible
console.log('You can\'t reach me!');
}
return {
'init': function() {
// Accessible
doStuff();
}
}
})().init();
您无法真正隐藏函数,因为它位于客户端下载的文件的源代码中,但您可以使其隐藏,以便它们无法从javascript访问您的函数
(function() {
var doStuff = function() {
// Not Accessible
console.log('You can\'t reach me!');
}
return {
'init': function() {
// Accessible
doStuff();
}
}
})().init();
如果您正在讨论访问修饰符,如public
、private
等,那么请查看Javascript是如何处理此问题的。以下是关键组件:
//constructor function (class)
function Maths(x, y) {
//public properties
this.x =x;
this.y = y;
//public methods
this.add = function () { _sum = x + y; return _sum; }
this.mod = function () { _mod = x % y; return _mod; }
//public method calls private method
this.show = function () {
this.add();
this.mod();
showResult();
}
//private variables
var _sum=0;
var _mod=0;
//private methods
function showResult() {
alert( "sum: " + _sum + ", mod: " + _mod );
}
}
//end function
//create instance
var plus = new Maths(3, 4);
plus.show();
//static method multiply, you can use it without instance of Maths
Maths.multiply = function (x,y) { return x * y; }
//call static method by constructor function (class) without instance of Maths
var result = Maths.multiply(5,7);
alert(result);
//output: 35
如果您正在讨论访问修饰符,如public
、private
等,那么请查看Javascript是如何处理此问题的。以下是关键组件:
//constructor function (class)
function Maths(x, y) {
//public properties
this.x =x;
this.y = y;
//public methods
this.add = function () { _sum = x + y; return _sum; }
this.mod = function () { _mod = x % y; return _mod; }
//public method calls private method
this.show = function () {
this.add();
this.mod();
showResult();
}
//private variables
var _sum=0;
var _mod=0;
//private methods
function showResult() {
alert( "sum: " + _sum + ", mod: " + _mod );
}
}
//end function
//create instance
var plus = new Maths(3, 4);
plus.show();
//static method multiply, you can use it without instance of Maths
Maths.multiply = function (x,y) { return x * y; }
//call static method by constructor function (class) without instance of Maths
var result = Maths.multiply(5,7);
alert(result);
//output: 35
你不能真的隐藏Javascript。访问者的浏览器需要访问它,如果浏览器可以访问它,访问者也可以。您可以将Javascript放在外部文件中,但这只是组织问题,而不是安全问题